cubrid-lab/pycubrid
cubrid-lab/pycubrid has 31 GitHub stars and 24 forks. Star changes are not measured yet. Last checked 2026-11-10 20:10 UTC. Last push 2026-11-02.
So werden diese Zahlen gemessen
Pure Python DB-API 2.0 (PEP 249) driver for CUBRID with asyncio and SSL/TLS support
What you can do
- Pure Python — no C extensions, no compilation, works everywhere Python runs
- Complete DB-API 2.0 — connect(), Cursor, fetchone/many/all, executemany, callproc
- Parameterized queries — cursor.execute(sql, params) with driver-side parameter binding (? placeholders escaped and interpolated locally)
- Batch operations — executemany() and executemany_batch() for bulk inserts
Gemessener Sternzuwachs
- in 24h
- Aktualisierung verzögert
- in 7 days
- Verlauf wird gesammelt
- in 15 days
- Verlauf wird gesammelt
- in 1 month
- Verlauf wird gesammelt
Nettoänderungen in überlappenden Zeiträumen, keine Tagessummen. Fehlende Messwerte bleiben leer. Sterne zeigen Interesse, nicht Qualität.
docs/README.de.md
Originalpycubrid
🌐 Community translation of README.md — English is canonical; this translation may lag behind the original. The
translation-syncCI check flags drift, and maintainers open resync PRs.
Reiner Python-DB-API-2.0-Treiber für die CUBRID-Datenbank — ohne C-Erweiterungen, ohne Kompilierung, implementiert die PEP-249-(DB-API-2.0)-Schnittstelle.
🇰🇷 한국어 · 🇺🇸 English · 🇨🇳 中文 · 🇮🇳 हिन्दी · 🇩🇪 Deutsch · 🇷🇺 Русский
Status: Stable (1.x). Die öffentliche API folgt Semantic Versioning: Minor-Releases ergänzen abwärtskompatible Funktionen, Patch-Releases liefern ausschließlich Fehlerbehebungen; Breaking Changes sind dem nächsten Major-Release (2.0+) vorbehalten und werden durch einen automatisierten
compat-check-CI-Job gegenapi-baseline.jsonabgesichert. Die Entwicklung läuft aktiv weiter — der vollständige Vertrag findet sich inRELEASE_POLICY.md.
Warum pycubrid?
CUBRID ist eine leistungsstarke relationale Open-Source-Datenbank, die in
koreanischen Behörden und Unternehmensanwendungen weit verbreitet ist. Der
bestehende C-Erweiterungstreiber (CUBRIDdb) hatte Build-Abhängigkeiten und
Probleme bei der Plattformkompatibilität.
pycubrid löst diese Probleme:
- Reine Python-Implementierung — keine C-Build-Abhängigkeiten, Installation nur mit
pip install - Implementiert PEP 249 (DB-API 2.0) — Standard-Ausnahmehierarchie, Typobjekte und Cursor-Schnittstelle
- Offline-Regressionstests mit 95 % Mindestabdeckung bei vollständigen Coverage-Läufen — siehe gemessene Abdeckung und CI-Ausführungsrichtlinie; reguläre PR-Smoke-Tests messen keine Abdeckung
- TLS/SSL für synchrone und asynchrone Verbindungen — optional
ssl=True(verifizierter Kontext, TLS 1.2 Minimum) oder ein benutzerdefiniertesssl.SSLContextbeiconnect()undpycubrid.aio.connect(). - Native asyncio-Unterstützung — Async/Await-API über
pycubrid.aiofür Anwendungen mit hoher Parallelität - PEP-561-typisiertes Paket —
py.typed-Marker für moderne IDEs und statische Analysewerkzeuge - Direkte Implementierung des CUBRID-CAS-Protokolls — keine zusätzliche Middleware erforderlich
- LOB-Unterstützung (CLOB/BLOB) — Verarbeitung großer Text- und Binärdaten
Anforderungen
Ende der Unterstützung für Python 3.10: Python 3.10 hat am 2026-10-01 das
Ende seiner Upstream-Lebensdauer erreicht
(PEP 619).
Die Versionslinien 1.8.x und 1.9.x unterstützen Python 3.10; 1.9.0 enthielt die
Vorankündigung. Ab 1.10.0 benötigt das Paket Python 3.11 oder neuer, daher
installiert pip unter Python 3.10 weiterhin 1.9.x. Aktualisieren Sie Ihren
Interpreter, erstellen Sie Ihre virtuelle Umgebung neu und prüfen Sie Ihre
Anwendung, bevor Sie aktualisieren.
- Python 3.11 oder neuer
- CUBRID-Datenbankserver 10.2+
Installation
pip install pycubrid
Schnellstart
Grundlegende Verbindung
import pycubrid
conn = pycubrid.connect(
host="localhost",
port=33000,
database="testdb",
user="dba",
password="",
)
cur = conn.cursor()
cur.execute("SELECT 1 + 1")
print(cur.fetchone()) # (2,)
cur.close()
conn.close()
Kontextmanager
import pycubrid
with pycubrid.connect(host="localhost", port=33000, database="testdb", user="dba") as conn:
with conn.cursor() as cur:
cur.execute("CREATE TABLE IF NOT EXISTS users (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100))")
cur.execute("INSERT INTO users (name) VALUES (?)", ("Alice",))
conn.commit()
cur.execute("SELECT * FROM users")
for row in cur:
print(row)
Async
import asyncio
import pycubrid.aio
async def main():
conn = await pycubrid.aio.connect(
host="localhost", port=33000, database="testdb", user="dba"
)
cur = conn.cursor()
await cur.execute("SELECT 1 + 1")
print(await cur.fetchone()) # (2,)
await cur.close()
await conn.close()
asyncio.run(main())
Praktische Beispiele
Führen Sie Vorbereitung, drei Beispiele und Bereinigung der Reihe nach in derselben Python-Sitzung in einer Testdatenbank aus. Passen Sie die Verbindungsdaten an Ihren Server an. Die eigene Tabelle darf noch nicht existieren: Die Vorbereitung schlägt dann fehl, statt eine vorhandene Tabelle zu verwenden oder zu löschen. Der manuelle Commit-Modus und der anfängliche DDL-Commit begrenzen den folgenden Rollback auf DML.
Vorbereitung
import pycubrid
conn = pycubrid.connect(host="localhost", port=33000, database="testdb", user="dba")
conn.autocommit = False
cur = conn.cursor()
cur.execute("CREATE TABLE pycubrid_quickstart_327 (id INT PRIMARY KEY, name VARCHAR(100))")
conn.commit()
Grundlegendes CRUD
cur.execute("INSERT INTO pycubrid_quickstart_327 (id, name) VALUES (?, ?)", (1, "Alice"))
cur.execute("SELECT name FROM pycubrid_quickstart_327 WHERE id = ?", (1,))
print(cur.fetchone()) # ('Alice',)
cur.execute("UPDATE pycubrid_quickstart_327 SET name = ? WHERE id = ?", ("Alicia", 1))
cur.execute("SELECT name FROM pycubrid_quickstart_327 WHERE id = ?", (1,))
print(cur.fetchone()) # ('Alicia',)
cur.execute("DELETE FROM pycubrid_quickstart_327 WHERE id = ?", (1,))
conn.commit()
Transaktionen: Commit und Rollback
cur.execute("INSERT INTO pycubrid_quickstart_327 (id, name) VALUES (?, ?)", (2, "Bob"))
conn.commit()
cur.execute("UPDATE pycubrid_quickstart_327 SET name = ? WHERE id = ?", ("Temporary", 2))
conn.rollback()
cur.execute("SELECT name FROM pycubrid_quickstart_327 WHERE id = ?", (2,))
print(cur.fetchone()) # ('Bob',)
conn.rollback()
Fehlerbehandlung
from pycubrid.exceptions import ProgrammingError
try:
cur.execute("SELECT missing_column FROM pycubrid_quickstart_327 WHERE id = ?", (2,))
except ProgrammingError as exc:
conn.rollback()
print(f"Query failed: {exc}")
Bereinigung
Führen Sie nach erfolgreicher Vorbereitung die Bereinigung auch aus, wenn ein Beispiel fehlschlägt; sie löscht nur die oben erstellte Tabelle. Weitere Beispiele: EXAMPLES.md.
conn.rollback()
cur.execute("DROP TABLE pycubrid_quickstart_327")
conn.commit()
cur.close()
conn.close()
PEP-249-Konformität
| Attribut | Wert |
|---|---|
apilevel |
"2.0" |
threadsafety |
1 (Verbindungen dürfen nicht zwischen Threads geteilt werden) |
paramstyle |
"qmark" (Positionsparameter ?) |
- Vollständige Standard-Ausnahmehierarchie:
Warning,Error,InterfaceError,DatabaseError,OperationalError,IntegrityError,InternalError,ProgrammingError,NotSupportedError - Standard-Typobjekte:
STRING,BINARY,NUMBER,DATETIME,ROWID - Standard-Konstruktoren:
Date(),Time(),Timestamp(),Binary(),DateFromTicks(),TimeFromTicks(),TimestampFromTicks()
Funktionen
- Reines Python — keine C-Erweiterungen, keine Kompilierung, läuft überall dort, wo Python läuft
- Vollständiges DB-API 2.0 —
connect(),Cursor,fetchone/many/all,executemany,callproc - Parametrisierte Abfragen —
cursor.execute(sql, params)mit treiberseitiger Parameterbindung (?-Platzhalter werden lokal maskiert und eingesetzt) - Batch-Operationen —
executemany()undexecutemany_batch()für Masseneinfügungen - LOB-Unterstützung —
create_lob(), Lesen/Schreiben von CLOB- und BLOB-Spalten - Schema-Introspektion —
get_schema_info()für Tabellen, Spalten, Indizes und Constraints - Auto-Commit-Steuerung — Eigenschaft
connection.autocommitfür das Transaktionsmanagement - Serverversionserkennung —
connection.get_server_version()liefert einen Versionsstring (z. B."11.2.0.0378") - Iterator-Protokoll — Cursor-Ergebnisse mit
for row in cursordurchlaufen - Kontextmanager —
with-Anweisungen für Verbindungen und Cursor - Async-Unterstützung —
pycubrid.aio.connect()mitAsyncConnectionundAsyncCursorfür asyncio-Event-Loops
Unterstützte CUBRID-Versionen
Das Projekt richtet sich an CUBRID 10.x und 11.x und wird in CI gegen folgende Versionen validiert:
- 10.2
- 11.0
- 11.2
- 11.4
SQLAlchemy-Integration
pycubrid funktioniert als Treiber für sqlalchemy-cubrid — den SQLAlchemy-2.0-Dialekt für CUBRID:
pip install "sqlalchemy-cubrid[pycubrid]"
from sqlalchemy import create_engine, text
engine = create_engine("cubrid+pycubrid://dba@localhost:33000/testdb")
with engine.connect() as conn:
result = conn.execute(text("SELECT 1"))
print(result.scalar())
SQLAlchemy-Funktionen (ORM, Core, Alembic-Migrationen, Schema-Reflexion) sind über den pycubrid-Treiber verfügbar, wenn er mit sqlalchemy-cubrid verwendet wird.
Dokumentation
| Leitfaden | Beschreibung |
|---|---|
| Verbindung | Verbindungszeichenfolgen, URL-Format, Konfiguration |
| Typzuordnung | Vollständige Typzuordnung, CUBRID-spezifische Typen, Sammlungstypen |
| API-Referenz | Vollständige API-Dokumentation — Module, Klassen, Funktionen |
| Protokoll | Referenz zum CAS-Wire-Protokoll |
| Entwicklung | Entwicklungsumgebung, Tests, Docker, Abdeckung, CI/CD |
| Beispiele | Praktische Anwendungsbeispiele mit Code |
| Fehlerbehebung | Verbindungsfehler, Abfrageprobleme, LOB-Behandlung, Debugging |
Kompatibilität
Unterstützt: Python 3.11–3.15 und CUBRID 10.2, 11.0, 11.2, 11.4. Gewöhnliche PRs verwenden einen Offline-Smoke-Lauf unter Ubuntu/Python 3.12; Änderungen mit hohem Risiko fügen Python 3.14/CUBRID 11.4 hinzu. Die Validierung auf main und die wöchentliche Validierung bei Änderungen führen zusätzlich Python 3.11/CUBRID 10.2 live sowie die vollständige Offline-Suite unter Python 3.11 und 3.15 aus. Die vollständige 5 × 4-Live-Matrix läuft bei ausdrücklichem Start und bei jedem Release. Siehe CI-Ausführungsrichtlinie und Support-Matrix.
Architektur
graph TD
app[Application]
pycubrid[pycubrid Connection/Cursor]
cas[CAS Protocol]
server[CUBRID Server]
app --> pycubrid
pycubrid --> cas
cas --> server
graph TD
root[pycubrid/]
init["__init__.py - Public API connect(), types, exceptions, __version__"]
connection[connection.py - Connection class connect/commit/rollback/cursor/LOB]
cursor[cursor.py - Cursor class execute/fetch/executemany/callproc/iterator]
types[types.py - DB-API 2.0 type objects and constructors]
exceptions[exceptions.py - PEP 249 exception hierarchy]
constants[constants.py - CAS function codes, data types, protocol constants]
protocol["protocol.py - CAS wire protocol packet classes (20 packet types)"]
packet[packet.py - Low-level packet reader/writer]
lob[lob.py - LOB support]
typed[py.typed - PEP 561 marker]
root --> init
root --> connection
root --> cursor
root --> types
root --> exceptions
root --> constants
root --> protocol
root --> packet
root --> lob
root --> typed
root --> aio
aio["aio/ - AsyncConnection, AsyncCursor, async connect()"]
FAQ
Wie verbinde ich mich mit Python zu CUBRID?
import pycubrid
conn = pycubrid.connect(host="localhost", port=33000, database="testdb", user="dba")
Wie installiere ich pycubrid?
pip install pycubrid — keine C-Erweiterungen oder Build-Werkzeuge erforderlich.
Welchen Parameterstil verwendet pycubrid?
Fragezeichenstil (qmark): cursor.execute("SELECT * FROM users WHERE id = ?", (1,))
Funktioniert pycubrid mit SQLAlchemy?
Ja. Installieren Sie pip install "sqlalchemy-cubrid[pycubrid]" und verwenden Sie die Verbindungs-URL cubrid+pycubrid://dba@localhost:33000/testdb.
Welche Python-Versionen werden unterstützt?
Python 3.11, 3.12, 3.13, 3.14 und 3.15 (Standard-Builds mit GIL).
Unterstützt pycubrid LOBs (CLOB/BLOB)?
Ja. Zeichenketten/Bytes können direkt in CLOB-/BLOB-Spalten eingefügt werden. Beim Lesen geben LOB-Spalten Daten zurück, auf die über den Cursor zugegriffen werden kann.
Ist pycubrid threadsicher?
pycubrid hat threadsafety = 1; das bedeutet, dass Verbindungen nicht zwischen Threads geteilt werden können. Erstellen Sie pro Thread eine eigene Verbindung.
Welche CUBRID-Versionen werden unterstützt?
CUBRID 10.2, 11.0, 11.2 und 11.4 werden in CI getestet.
Unterstützt pycubrid async/await?
Ja. Verwenden Sie pycubrid.aio.connect() für native asyncio-Unterstützung. Die Async-Oberfläche ist der Sync-API ähnlich: Mit await conn.ping(reconnect=...) steht derselbe native CHECK_CAS-Health-Check wie bei Connection.ping() zur Verfügung, create_lob() bleibt weiterhin nur synchron verfügbar, und Änderungen am Auto-Commit erfolgen mit await conn.set_autocommit(...) statt über einen Property-Setter.
Verwandte Projekte
- sqlalchemy-cubrid — SQLAlchemy-2.0-Dialekt für CUBRID
- cubrid-cookbook-python — Produktionsreife Python-Beispiele für CUBRID
Roadmap
Siehe ROADMAP.md für die Ausrichtung des Projekts und die nächsten Meilensteine.
Für die Ökosystem-Perspektive siehe die CUBRID Labs Ecosystem Roadmap.
Mitwirken
Hinweise finden Sie in CONTRIBUTING.md, die Entwicklungsumgebung in docs/DEVELOPMENT.md.
Sicherheit
Melden Sie Schwachstellen vertraulich über GitHubs Private Vulnerability Reporting (alternativ per E-Mail) — siehe SECURITY.md. Erstellen Sie keine öffentlichen Issues für Sicherheitsprobleme.
Lizenz
MIT — siehe LICENSE.
Ähnliche Projekte entdecken
Asabeneh/30-Days-Of-Python
Die Programmier-Challenge 30 Days of Python ist eine Schritt-für-Schritt-Anleitung, um die Programmiersprache Python in 30 Tagen zu lernen. Diese Challenge kann mehr als 100 Tage dauern. Gehe in deinem eigenen Tempo vor. Diese Videos können ebenfalls helfen: https://www.youtube.com/channel/UC7PNRuno1rzYPb1xLa4yktw
78,486 Sternegrafana/grafana
Offene und kombinierbare Plattform für Observability und Datenvisualisierung. Visualisiert Metriken, Logs und Traces aus mehreren Quellen wie Prometheus, Loki, Elasticsearch, InfluxDB, Postgres und vielen weiteren.
77,790 Sterneredis/redis
Für Entwickler, die echtzeitfähige, datengesteuerte Anwendungen erstellen, ist Redis der bevorzugte, schnellste und funktionsreichste Cache, Datenstrukturserver und die entsprechende Abfrageengine für Dokumente und Vektoren.
77,332 Sterneapache/superset
Apache Superset ist eine Plattform für Datenvisualisierung und Datenexploration.
75,455 Sterne