pycubrid¶
🌐 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.
CUBRID डेटाबेस के लिए शुद्ध Python DB-API 2.0 ड्राइवर — बिना C एक्सटेंशन, बिना कम्पाइलेशन, PEP 249 (DB-API 2.0) इंटरफ़ेस को लागू करता है।
🇰🇷 한국어 · 🇺🇸 English · 🇨🇳 中文 · 🇮🇳 हिन्दी · 🇩🇪 Deutsch · 🇷🇺 Русский
स्थिति: Stable (1.x). सार्वजनिक API semantic versioning का पालन करता है: minor releases पिछड़े-संगत (backward-compatible) सुविधाएँ जोड़ते हैं और patch releases केवल बग फिक्स देते हैं; ब्रेकिंग बदलाव अगले major version (2.0+) के लिए सुरक्षित हैं और
api-baseline.jsonके विरुद्ध स्वचालितcompat-checkCI जॉब द्वारा सुरक्षित किए जाते हैं। सक्रिय विकास जारी है — पूर्ण अनुबंध के लिएRELEASE_POLICY.mdदेखें।
pycubrid क्यों?¶
CUBRID एक उच्च-प्रदर्शन ओपन-सोर्स रिलेशनल डेटाबेस है, जिसका उपयोग कोरियाई सार्वजनिक
क्षेत्र और एंटरप्राइज़ अनुप्रयोगों में व्यापक रूप से किया जाता है। मौजूदा C एक्सटेंशन
ड्राइवर (CUBRIDdb) में build dependencies और platform compatibility की समस्याएँ थीं।
pycubrid इन समस्याओं को हल करता है:
- शुद्ध Python कार्यान्वयन — कोई C build dependency नहीं, केवल
pip installसे इंस्टॉल - PEP 249 (DB-API 2.0) लागू करता है — मानक exception hierarchy, type objects, और cursor interface
- 770 ऑफ़लाइन टेस्ट / कुल 811 के साथ 97.29% code coverage — अधिकांश टेस्ट डेटाबेस के बिना चलते हैं
- सिंक और एसिंक कनेक्शन दोनों के लिए TLS/SSL —
connect()औरpycubrid.aio.connect()पर वैकल्पिकssl=True(verified context, TLS 1.2 minimum) या कस्टमssl.SSLContext। नोट: Python 3.10 पर, सर्टिफिकेट-वेरीफाई विफलताओं पर एसिंक TLS हैंग हो सकता है (a known CPython asyncio TLS handshake bug on Python 3.10, 3.13/3.14 में फिक्स)। देखें Troubleshooting और #156। - नेटिव asyncio सपोर्ट — उच्च-concurrency अनुप्रयोगों के लिए
pycubrid.aioके जरिए async/await API - PEP 561 typed package — आधुनिक IDE और static analysis support के लिए
py.typedmarker - CUBRID CAS protocol का सीधा implementation — किसी अतिरिक्त middleware की आवश्यकता नहीं
- LOB (CLOB/BLOB) सपोर्ट — बड़े text और binary data को संभालें
आवश्यकताएँ¶
- Python 3.10+
- CUBRID डेटाबेस सर्वर 10.2+
इंस्टॉलेशन¶
त्वरित शुरुआत¶
बुनियादी कनेक्शन¶
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()
कॉन्टेक्स्ट मैनेजर¶
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())
पैरामीटर बाइंडिंग¶
# qmark शैली (प्रश्न चिह्न)
cur.execute("SELECT * FROM users WHERE name = ? AND age > ?", ("Alice", 25))
# executemany के साथ batch insert
data = [("Alice", 30), ("Bob", 25), ("Charlie", 35)]
cur.executemany("INSERT INTO users (name, age) VALUES (?, ?)", data)
conn.commit()
पैरामीटराइज़्ड क्वेरी¶
sql = "SELECT * FROM users WHERE department = ?"
cur.execute(sql, ("Engineering",))
engineers = cur.fetchall()
cur.execute(sql, ("Marketing",))
marketers = cur.fetchall()
PEP 249 अनुपालन¶
| विशेषता | मान |
|---|---|
apilevel |
"2.0" |
threadsafety |
1 (कनेक्शन threads के बीच साझा नहीं किए जा सकते) |
paramstyle |
"qmark" (positional parameters ?) |
- पूर्ण मानक exception hierarchy:
Warning,Error,InterfaceError,DatabaseError,OperationalError,IntegrityError,InternalError,ProgrammingError,NotSupportedError - मानक type objects:
STRING,BINARY,NUMBER,DATETIME,ROWID - मानक constructors:
Date(),Time(),Timestamp(),Binary(),DateFromTicks(),TimeFromTicks(),TimestampFromTicks()
विशेषताएँ¶
- शुद्ध Python — कोई C एक्सटेंशन नहीं, कोई कम्पाइलेशन नहीं, जहाँ Python चलता है वहाँ काम करता है
- पूर्ण DB-API 2.0 —
connect(),Cursor,fetchone/many/all,executemany,callproc - पैरामीटराइज़्ड क्वेरी — server-side
PREPARE_AND_EXECUTEके साथcursor.execute(sql, params) - बैच ऑपरेशन — bulk inserts के लिए
executemany()औरexecutemany_batch() - LOB सपोर्ट —
create_lob(), CLOB और BLOB कॉलम का read/write - स्कीमा introspection — tables, columns, indexes, constraints के लिए
get_schema_info() - Auto-commit नियंत्रण — transaction management के लिए
connection.autocommitproperty - Server version detection —
connection.get_server_version()version string लौटाता है (उदाहरण:"11.2.0.0378") - Iterator protocol —
for row in cursorके साथ cursor results पर iterate करें - Context managers — connections और cursors दोनों के लिए
withstatements - Async सपोर्ट — asyncio event loops के लिए
pycubrid.aio.connect()के साथAsyncConnectionऔरAsyncCursor
समर्थित CUBRID संस्करण¶
यह परियोजना CUBRID 10.x और 11.x को लक्षित करती है और CI में निम्न संस्करणों के खिलाफ validate की जाती है:
- 10.2
- 11.0
- 11.2
- 11.4
SQLAlchemy एकीकरण¶
pycubrid, sqlalchemy-cubrid — CUBRID के लिए SQLAlchemy 2.0 dialect — के ड्राइवर के रूप में काम करता है:
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())
जब pycubrid को sqlalchemy-cubrid के साथ उपयोग किया जाता है, तब SQLAlchemy की सुविधाएँ (ORM, Core, Alembic migrations, schema reflection) उपलब्ध होती हैं।
प्रलेखन¶
| मार्गदर्शिका | विवरण |
|---|---|
| कनेक्शन | कनेक्शन स्ट्रिंग, URL प्रारूप, कॉन्फ़िगरेशन |
| टाइप मैपिंग | पूर्ण टाइप मैपिंग, CUBRID-विशिष्ट टाइप, कलेक्शन टाइप |
| API संदर्भ | पूर्ण API प्रलेखन — मॉड्यूल, क्लास, फ़ंक्शन |
| प्रोटोकॉल | CAS wire protocol संदर्भ |
| डेवलपमेंट | डेव सेटअप, टेस्टिंग, Docker, कवरेज, CI/CD |
| उदाहरण | कोड के साथ व्यावहारिक उपयोग उदाहरण |
| समस्या निवारण | कनेक्शन त्रुटियाँ, क्वेरी समस्याएँ, LOB हैंडलिंग, डिबगिंग |
संगतता¶
| Python 3.10 | Python 3.11 | Python 3.12 | Python 3.13 | Python 3.14 | |
|---|---|---|---|---|---|
| ऑफ़लाइन टेस्ट | ✅ | ✅ | ✅ | ✅ | ✅ |
| CUBRID 11.4 | ✅ | -- | -- | -- | ✅ |
| CUBRID 11.2 | ✅ | -- | -- | -- | ✅ |
| CUBRID 11.0 | ✅ | -- | -- | -- | ✅ |
| CUBRID 10.2 | ✅ | -- | -- | -- | ✅ |
CI हर PR/push पर ऊपर दी गई matrix चलाता है (Python 3.10 + 3.14 anchors × सभी CUBRID versions)।
पूर्ण 5 × 4 Python × CUBRID matrix nightly, tagged releases पर, और workflow_dispatch के जरिए on demand चलती है।
आर्किटेक्चर¶
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 (18 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¶
मैं Python से CUBRID से कैसे कनेक्ट करूँ?¶
import pycubrid
conn = pycubrid.connect(host="localhost", port=33000, database="testdb", user="dba")
मैं pycubrid कैसे इंस्टॉल करूँ?¶
pip install pycubrid — किसी C एक्सटेंशन या build tools की आवश्यकता नहीं।
pycubrid कौन-सी parameter style का उपयोग करता है?¶
Question mark (qmark) शैली: cursor.execute("SELECT * FROM users WHERE id = ?", (1,))
क्या pycubrid SQLAlchemy के साथ काम करता है?¶
हाँ। pip install "sqlalchemy-cubrid[pycubrid]" इंस्टॉल करें और कनेक्शन URL cubrid+pycubrid://dba@localhost:33000/testdb का उपयोग करें।
कौन-से Python versions समर्थित हैं?¶
Python 3.10, 3.11, 3.12, 3.13, और 3.14।
क्या pycubrid LOBs (CLOB/BLOB) को सपोर्ट करता है?¶
हाँ। आप strings/bytes को सीधे CLOB/BLOB columns में insert कर सकते हैं। पढ़ने पर, LOB columns ऐसा डेटा लौटाते हैं जिसे cursor के माध्यम से access किया जा सकता है।
क्या pycubrid thread-safe है?¶
pycubrid का threadsafety = 1 है, जिसका अर्थ है कि connections threads के बीच साझा नहीं किए जा सकते। हर thread के लिए अलग connection बनाएँ।
कौन-से CUBRID versions समर्थित हैं?¶
CUBRID 10.2, 11.0, 11.2, और 11.4 CI में टेस्ट किए जाते हैं।
क्या pycubrid async/await को सपोर्ट करता है?¶
हाँ। Native asyncio support के लिए pycubrid.aio.connect() का उपयोग करें। Async surface sync API के काफ़ी समान है: await conn.ping(reconnect=...) sync Connection.ping() जैसा ही native CHECK_CAS health check चलाता है, create_lob() अभी भी sync-only रहता है, और auto-commit changes property setter की जगह await conn.set_autocommit(...) का उपयोग करती हैं।
संबंधित परियोजनाएँ¶
- sqlalchemy-cubrid — CUBRID के लिए SQLAlchemy 2.0 dialect
- cubrid-cookbook-python — CUBRID के लिए production-ready Python उदाहरण
रोडमैप¶
इस परियोजना की दिशा और अगले milestones के लिए ROADMAP.md देखें।
पूरे ecosystem के दृष्टिकोण के लिए CUBRID Labs Ecosystem Roadmap देखें।
योगदान¶
दिशानिर्देशों के लिए CONTRIBUTING.md और development setup के लिए docs/DEVELOPMENT.md देखें।
सुरक्षा¶
कमज़ोरियों की रिपोर्ट ईमेल के माध्यम से करें — विवरण के लिए SECURITY.md देखें। सुरक्षा चिंताओं के लिए सार्वजनिक issues न खोलें।
लाइसेंस¶
MIT — LICENSE देखें.