diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 8cb11f4..f477240 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -4,8 +4,8 @@ contact_links: url: https://cubrid.org/documentation about: Official CUBRID database documentation - name: sqlalchemy-cubrid - url: https://github.com/cubrid-labs/sqlalchemy-cubrid + url: https://github.com/cubrid-lab/sqlalchemy-cubrid about: SQLAlchemy 2.0 dialect for CUBRID - name: pycubrid - url: https://github.com/cubrid-labs/pycubrid + url: https://github.com/cubrid-lab/pycubrid about: Pure Python DB-API 2.0 driver for CUBRID diff --git a/AGENTS.md b/AGENTS.md index db0148b..1d742f5 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -6,7 +6,7 @@ ## Read First - `README.md` -- `PRD.md` +- `docs/internal/PRD.md` - `CONTRIBUTING.md` ## Repository Structure @@ -32,9 +32,9 @@ fundamentals/ → Step-by-step reference for core operations - If an example's setup or dependencies change, update the surrounding docs in the same change. - Avoid adding hidden prerequisites that are not documented. -## Development Workflow (cubrid-labs org standard) +## Development Workflow (cubrid-lab org standard) -All non-trivial work across cubrid-labs repositories MUST follow this 4-phase cycle: +All non-trivial work across cubrid-lab repositories MUST follow this 4-phase cycle: 1. **Oracle Design Review** — Consult Oracle before implementation to validate architecture, API surface, and approach. Raise concerns early. 2. **Implementation** — Build the feature/fix with tests. Follow existing codebase patterns. @@ -53,7 +53,7 @@ Skipping any phase requires explicit justification. Trivial changes (typos, sing ## Project Context > This repo is the **Python cookbook** for the CUBRID ecosystem. -> Board: [CUBRID Ecosystem Roadmap](https://github.com/orgs/cubrid-labs/projects/2) +> Board: [CUBRID Ecosystem Roadmap](https://github.com/orgs/cubrid-lab/projects/2) ### Role diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index dcf4994..0c35d5c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -156,5 +156,5 @@ For new example requests, describe the use case and framework. ## Questions? -Open a [GitHub Discussion](https://github.com/cubrid-labs/cubrid-cookbook/discussions) -or file an [issue](https://github.com/cubrid-labs/cubrid-cookbook/issues). +Open a [GitHub Discussion](https://github.com/cubrid-lab/cubrid-cookbook/discussions) +or file an [issue](https://github.com/cubrid-lab/cubrid-cookbook/issues). diff --git a/README.md b/README.md index b7233b1..9acb7af 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ [![CUBRID 11.2 | 11.4](https://img.shields.io/badge/CUBRID-11.2%20%7C%2011.4-green.svg)](SUPPORT_MATRIX.md) [![Python 3.10+](https://img.shields.io/badge/python-3.10%2B-blue.svg)](https://www.python.org/downloads/) ![pycubrid](https://img.shields.io/badge/pycubrid-%E2%89%A51.3.2-blue) -![sqlalchemy-cubrid](https://img.shields.io/badge/sqlalchemy--cubrid-%E2%89%A50.3.0-blue) +![sqlalchemy-cubrid](https://img.shields.io/badge/sqlalchemy--cubrid-%E2%89%A51.0-blue) ![status](https://img.shields.io/badge/status-active%20development-yellow) --- @@ -75,7 +75,7 @@ Step-by-step reference for every core operation: | [Connecting](fundamentals/connect/) | Basic connection, metadata, context managers | | [CRUD](fundamentals/crud/) | INSERT, SELECT, UPDATE, DELETE with parameters | | [Transactions](fundamentals/transactions/) | Commit, rollback, savepoints, auto-commit | -| [Prepared statements](fundamentals/prepared-statements/) | Parameterized queries | +| [Prepared statements](fundamentals/parameterized-queries/) | Parameterized queries | | [Error handling](fundamentals/error-handling/) | Exception types, retry patterns | | [LOB handling](fundamentals/lob-handling/) | BLOB/CLOB operations | | [ORM basics](fundamentals/orm-basics/) | SQLAlchemy engine, core, ORM, relationships | @@ -143,7 +143,7 @@ cubrid-cookbook-python/ │ ├── connect/ # Connection basics │ ├── crud/ # CRUD operations │ ├── transactions/ # Transaction management -│ ├── prepared-statements/ # Parameterized queries +│ ├── parameterized-queries/ # Parameterized queries │ ├── error-handling/ # Exception patterns │ ├── lob-handling/ # BLOB/CLOB │ └── orm-basics/ # SQLAlchemy ORM @@ -152,15 +152,15 @@ cubrid-cookbook-python/ ## Related Projects -- [pycubrid](https://github.com/cubrid-labs/pycubrid) — Pure Python DB-API 2.0 driver for CUBRID -- [sqlalchemy-cubrid](https://github.com/cubrid-labs/sqlalchemy-cubrid) — SQLAlchemy 2.0 dialect for CUBRID +- [pycubrid](https://github.com/cubrid-lab/pycubrid) — Pure Python DB-API 2.0 driver for CUBRID +- [sqlalchemy-cubrid](https://github.com/cubrid-lab/sqlalchemy-cubrid) — SQLAlchemy 2.0 dialect for CUBRID - [CUBRID](https://www.cubrid.org/) — The CUBRID database ## Roadmap See [`ROADMAP.md`](ROADMAP.md) for planned additions. -For the ecosystem-wide view, see the [CUBRID Labs Ecosystem Roadmap](https://github.com/cubrid-labs/.github/blob/main/ROADMAP.md) and [Project Board](https://github.com/orgs/cubrid-labs/projects/2). +For the ecosystem-wide view, see the [CUBRID Labs Ecosystem Roadmap](https://github.com/cubrid-lab/.github/blob/main/ROADMAP.md) and [Project Board](https://github.com/orgs/cubrid-lab/projects/2). ## Contributing diff --git a/ROADMAP.md b/ROADMAP.md index e749abd..1a3d894 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -3,13 +3,13 @@ > **Last updated**: 2026-03-20 > > This roadmap reflects current priorities. For the ecosystem-wide view, see the -> [CUBRID Labs Ecosystem Roadmap](https://github.com/cubrid-labs/.github/blob/main/ROADMAP.md). +> [CUBRID Labs Ecosystem Roadmap](https://github.com/cubrid-lab/.github/blob/main/ROADMAP.md). ## Links -- 📋 [GitHub Milestones](https://github.com/cubrid-labs/cubrid-cookbook/milestones) -- 🗂️ [Org Project Board](https://github.com/orgs/cubrid-labs/projects/2) -- 🌐 [Ecosystem Roadmap](https://github.com/cubrid-labs/.github/blob/main/ROADMAP.md) +- 📋 [GitHub Milestones](https://github.com/cubrid-lab/cubrid-cookbook/milestones) +- 🗂️ [Org Project Board](https://github.com/orgs/cubrid-lab/projects/2) +- 🌐 [Ecosystem Roadmap](https://github.com/cubrid-lab/.github/blob/main/ROADMAP.md) ## Next Release — v1.0 — Complete Examples diff --git a/SUPPORT_MATRIX.md b/SUPPORT_MATRIX.md index d1285fb..efe9c89 100644 --- a/SUPPORT_MATRIX.md +++ b/SUPPORT_MATRIX.md @@ -10,6 +10,10 @@ Tested combinations of CUBRID server, Python version, and driver/framework. | **11.2** | ✅ Fully supported | Primary development/test target | | 11.0 | ⚠️ Untested | Should work (same CAS protocol) | | 10.2 | ⚠️ Untested | Should work (same CAS protocol) | +> **Scope note**: The cookbook is tested only against CUBRID 11.2 and 11.4. Older +> versions (10.2, 11.0) share the same CAS protocol and should work but are +> not exercised by the recipe test suite. The drivers (`pycubrid`, +> `sqlalchemy-cubrid`) themselves support the full 10.2–11.4 range. ## Python Versions @@ -26,7 +30,7 @@ Tested combinations of CUBRID server, Python version, and driver/framework. | Component | Version | Status | |-----------|---------|--------| | pycubrid | ≥ 1.3.2 | ✅ Required | -| sqlalchemy-cubrid | ≥ 0.3.0 | ✅ Required for SQLAlchemy recipes | +| sqlalchemy-cubrid | ≥ 1.0 | ✅ Required for SQLAlchemy recipes | | SQLAlchemy | 2.0–2.1 | ✅ | | Flask | ≥ 3.0 | ✅ | | Flask-SQLAlchemy | ≥ 3.1 | ✅ | diff --git a/docs/agent-playbook.md b/docs/agent-playbook.md index b1cedfb..cae3b6e 100644 --- a/docs/agent-playbook.md +++ b/docs/agent-playbook.md @@ -2,7 +2,7 @@ ## Source Of Truth - `README.md` for example catalog, quick start, and project structure. -- `PRD.md` for example quality expectations and roadmap. +- `docs/internal/PRD.md` for example quality expectations and roadmap. - `CONTRIBUTING.md` for contribution rules and language-specific checks. - `Makefile` and `docker-compose.yml` for local database workflow. @@ -14,7 +14,7 @@ ## Change Workflow 1. Identify the language and layer of the example you are touching. 2. Keep example code minimal, runnable, and directly aligned with the README. -3. If you add a new example family, document it in both `README.md` and `PRD.md`. +3. If you add a new example family, document it in both `README.md` and `docs/internal/PRD.md`. 4. Prefer examples that can be copied by users with minimal adaptation. ## Validation diff --git a/PRD.md b/docs/internal/PRD.md similarity index 96% rename from PRD.md rename to docs/internal/PRD.md index 697c443..1701f1d 100644 --- a/PRD.md +++ b/docs/internal/PRD.md @@ -4,7 +4,7 @@ **Project**: cubrid-cookbook-python **Status**: Active (continuously updated) -**Repository**: [github.com/cubrid-labs/cubrid-cookbook-python](https://github.com/cubrid-labs/cubrid-cookbook-python) +**Repository**: [github.com/cubrid-lab/cubrid-cookbook-python](https://github.com/cubrid-lab/cubrid-cookbook-python) **License**: MIT ### 1.1 Problem Statement @@ -71,7 +71,7 @@ cubrid-cookbook-python/ │ ├── connect/ # Connection basics │ ├── crud/ # CRUD operations │ ├── transactions/ # Transaction management -│ ├── prepared-statements/ # Parameterized queries +│ ├── parameterized-queries/ # Parameterized queries │ ├── error-handling/ # Exception patterns │ ├── lob-handling/ # BLOB/CLOB │ └── orm-basics/ # SQLAlchemy ORM @@ -155,9 +155,9 @@ Every example must: | Layer | Project | |---|---| -| **DB Driver** | [pycubrid](https://github.com/cubrid-labs/pycubrid) | -| **ORM Dialect** | [sqlalchemy-cubrid](https://github.com/cubrid-labs/sqlalchemy-cubrid) | -| **Benchmarks** | [cubrid-benchmark](https://github.com/cubrid-labs/cubrid-benchmark) | +| **DB Driver** | [pycubrid](https://github.com/cubrid-lab/pycubrid) | +| **ORM Dialect** | [sqlalchemy-cubrid](https://github.com/cubrid-lab/sqlalchemy-cubrid) | +| **Benchmarks** | [cubrid-benchmark](https://github.com/cubrid-lab/cubrid-benchmark) | | **Database** | [CUBRID](https://www.cubrid.org/) | --- diff --git a/fundamentals/README.md b/fundamentals/README.md index c4098aa..714534b 100644 --- a/fundamentals/README.md +++ b/fundamentals/README.md @@ -11,7 +11,7 @@ Start here if you're new to CUBRID + Python. | [connect/](./connect/) | Basic connection, metadata, cursor usage | pycubrid | | [crud/](./crud/) | Create, Read, Update, Delete operations | pycubrid | | [transactions/](./transactions/) | Commit, rollback, isolation levels | pycubrid | -| [prepared-statements/](./prepared-statements/) | Parameterized queries for safety and performance | pycubrid | +| [parameterized-queries/](./parameterized-queries/) | Parameterized queries for safety and performance | pycubrid | | [error-handling/](./error-handling/) | Connection failures, constraint violations, timeouts | pycubrid | | [lob-handling/](./lob-handling/) | Large Object (BLOB/CLOB) operations | pycubrid | | [orm-basics/](./orm-basics/) | SQLAlchemy engine, Core, ORM, relationships, reflection | SQLAlchemy | @@ -42,7 +42,7 @@ pip install sqlalchemy-cubrid ## Learning Path ``` -connect/ → crud/ → transactions/ → prepared-statements/ → orm-basics/ +connect/ → crud/ → transactions/ → parameterized-queries/ → orm-basics/ ``` After fundamentals, continue to: diff --git a/fundamentals/connect/requirements.txt b/fundamentals/connect/requirements.txt index a9b0247..6e0d753 100644 --- a/fundamentals/connect/requirements.txt +++ b/fundamentals/connect/requirements.txt @@ -1 +1 @@ -pycubrid @ git+https://github.com/cubrid-labs/pycubrid.git@main +pycubrid @ git+https://github.com/cubrid-lab/pycubrid.git@main diff --git a/fundamentals/lob-handling/06_lob.py b/fundamentals/lob-handling/06_lob.py index 9f0ff46..d908ad8 100644 --- a/fundamentals/lob-handling/06_lob.py +++ b/fundamentals/lob-handling/06_lob.py @@ -69,7 +69,7 @@ def clob_example(conn: pycubrid.Connection) -> None: "README", "# CUBRID Cookbook\n\nA collection of examples for CUBRID database.", ), - ("License", "Apache License 2.0\n\nCopyright 2026 cubrid-labs"), + ("License", "Apache License 2.0\n\nCopyright 2026 cubrid-lab"), ( "Long Text", "Lorem ipsum dolor sit amet. " * 100, # ~3KB of text diff --git a/fundamentals/orm-basics/requirements.txt b/fundamentals/orm-basics/requirements.txt index 0bed2f6..e3a6393 100644 --- a/fundamentals/orm-basics/requirements.txt +++ b/fundamentals/orm-basics/requirements.txt @@ -1,3 +1,3 @@ sqlalchemy>=2.0 -sqlalchemy-cubrid @ git+https://github.com/cubrid-labs/sqlalchemy-cubrid.git@main -pycubrid @ git+https://github.com/cubrid-labs/pycubrid.git@main +sqlalchemy-cubrid @ git+https://github.com/cubrid-lab/sqlalchemy-cubrid.git@main +pycubrid @ git+https://github.com/cubrid-lab/pycubrid.git@main diff --git a/fundamentals/prepared-statements/04_prepared.py b/fundamentals/parameterized-queries/04_prepared.py similarity index 100% rename from fundamentals/prepared-statements/04_prepared.py rename to fundamentals/parameterized-queries/04_prepared.py diff --git a/fundamentals/parameterized-queries/README.md b/fundamentals/parameterized-queries/README.md new file mode 100644 index 0000000..78aca49 --- /dev/null +++ b/fundamentals/parameterized-queries/README.md @@ -0,0 +1,44 @@ +# Parameterized Queries + +> ⚠️ **Not server-side prepare.** pycubrid implements parameterized queries via +> **client-side escape + interpolation**, not via server-side `PREPARE`/`EXECUTE`. +> This differs from JDBC `PreparedStatement`. See +> [pycubrid PARAMETER_BINDING.md](https://github.com/cubrid-lab/pycubrid/blob/main/docs/PARAMETER_BINDING.md) +> for the full 1.x binding contract. + +This directory demonstrates safe parameterized query patterns using pycubrid's +qmark (`?`) placeholder style. + +## Recipes + +| Recipe | Description | +|--------|-------------| +| [`04_prepared.py`](04_prepared.py) | Parameterized queries, batch operations with `executemany()` | + +## Why parameterized queries? + +Parameterized queries (passing values via `?` placeholders and a separate +`parameters` argument) are the correct way to send user-supplied values to the +database. **Never** assemble SQL with f-strings or `%` formatting — that path +leads to SQL injection. + +## pycubrid binding model + +When you call: + +```python +cur.execute("SELECT * FROM users WHERE id = ? AND name = ?", [42, "Alice"]) +``` + +pycubrid: + +1. Splits the SQL on unquoted `?` placeholders. +2. Formats each Python value as a SQL literal via `_format_parameter()` + (strings escaped via single-quote doubling, `None` → `NULL`, etc.). +3. Concatenates the segments and literals into one SQL string. +4. Sends the fully-rendered SQL to CUBRID via `PrepareAndExecutePacket`. + +The CAS function code is named `PREPARE_AND_EXECUTE`, but the protocol expects +a complete SQL string — there is no separate typed parameter payload. See +[pycubrid PARAMETER_BINDING.md](https://github.com/cubrid-lab/pycubrid/blob/main/docs/PARAMETER_BINDING.md) +for the full per-type mapping and explicit non-guarantees. diff --git a/fundamentals/prepared-statements/expected/04_prepared.expected b/fundamentals/parameterized-queries/expected/04_prepared.expected similarity index 100% rename from fundamentals/prepared-statements/expected/04_prepared.expected rename to fundamentals/parameterized-queries/expected/04_prepared.expected diff --git a/fundamentals/pycubrid/06_lob.py b/fundamentals/pycubrid/06_lob.py index 9f0ff46..d908ad8 100644 --- a/fundamentals/pycubrid/06_lob.py +++ b/fundamentals/pycubrid/06_lob.py @@ -69,7 +69,7 @@ def clob_example(conn: pycubrid.Connection) -> None: "README", "# CUBRID Cookbook\n\nA collection of examples for CUBRID database.", ), - ("License", "Apache License 2.0\n\nCopyright 2026 cubrid-labs"), + ("License", "Apache License 2.0\n\nCopyright 2026 cubrid-lab"), ( "Long Text", "Lorem ipsum dolor sit amet. " * 100, # ~3KB of text diff --git a/fundamentals/pycubrid/README.md b/fundamentals/pycubrid/README.md index 5c3ff2a..99188d4 100644 --- a/fundamentals/pycubrid/README.md +++ b/fundamentals/pycubrid/README.md @@ -1,6 +1,6 @@ # pycubrid Examples -Direct database access using the [pycubrid](https://github.com/cubrid-labs/pycubrid) DB-API 2.0 driver — a pure Python connector for CUBRID with no C dependencies. +Direct database access using the [pycubrid](https://github.com/cubrid-lab/pycubrid) DB-API 2.0 driver — a pure Python connector for CUBRID with no C dependencies. ## Features @@ -188,6 +188,6 @@ All users (5 rows): ## Learn More -- [pycubrid documentation](https://github.com/cubrid-labs/pycubrid) +- [pycubrid documentation](https://github.com/cubrid-lab/pycubrid) - [PEP 249 — DB-API 2.0 Specification](https://peps.python.org/pep-0249/) - [CUBRID SQL Guide](https://www.cubrid.org/manual/en/11.2/sql/index.html) diff --git a/fundamentals/pycubrid/requirements.txt b/fundamentals/pycubrid/requirements.txt index a9b0247..6e0d753 100644 --- a/fundamentals/pycubrid/requirements.txt +++ b/fundamentals/pycubrid/requirements.txt @@ -1 +1 @@ -pycubrid @ git+https://github.com/cubrid-labs/pycubrid.git@main +pycubrid @ git+https://github.com/cubrid-lab/pycubrid.git@main diff --git a/llms.txt b/llms.txt index 9298c50..8703148 100644 --- a/llms.txt +++ b/llms.txt @@ -15,30 +15,30 @@ Key facts: ## Python Examples -- [pycubrid](https://github.com/cubrid-labs/cubrid-cookbook/tree/main/python/pycubrid): Direct DB-API 2.0 driver — connect, query, transactions, prepared statements, error handling, LOBs -- [SQLAlchemy](https://github.com/cubrid-labs/cubrid-cookbook/tree/main/python/sqlalchemy): Core + ORM — engine, models, CRUD, DML extensions (ODKU, MERGE, REPLACE) -- [FastAPI](https://github.com/cubrid-labs/cubrid-cookbook/tree/main/python/fastapi): REST API with automatic docs, dependency injection, async-ready -- [Django](https://github.com/cubrid-labs/cubrid-cookbook/tree/main/python/django): Django project with CUBRID via SQLAlchemy bridge -- [Flask](https://github.com/cubrid-labs/cubrid-cookbook/tree/main/python/flask): Flask + Flask-SQLAlchemy — blueprints, models, CRUD routes -- [Pandas](https://github.com/cubrid-labs/cubrid-cookbook/tree/main/python/pandas): Data analysis pipeline — read_sql, transforms, visualization -- [Streamlit](https://github.com/cubrid-labs/cubrid-cookbook/tree/main/python/streamlit): Interactive data dashboard with live CUBRID queries -- [Celery](https://github.com/cubrid-labs/cubrid-cookbook/tree/main/python/celery): Async task queue — background jobs backed by CUBRID +- [pycubrid](https://github.com/cubrid-lab/cubrid-cookbook/tree/main/python/pycubrid): Direct DB-API 2.0 driver — connect, query, transactions, prepared statements, error handling, LOBs +- [SQLAlchemy](https://github.com/cubrid-lab/cubrid-cookbook/tree/main/python/sqlalchemy): Core + ORM — engine, models, CRUD, DML extensions (ODKU, MERGE, REPLACE) +- [FastAPI](https://github.com/cubrid-lab/cubrid-cookbook/tree/main/python/fastapi): REST API with automatic docs, dependency injection, async-ready +- [Django](https://github.com/cubrid-lab/cubrid-cookbook/tree/main/python/django): Django project with CUBRID via SQLAlchemy bridge +- [Flask](https://github.com/cubrid-lab/cubrid-cookbook/tree/main/python/flask): Flask + Flask-SQLAlchemy — blueprints, models, CRUD routes +- [Pandas](https://github.com/cubrid-lab/cubrid-cookbook/tree/main/python/pandas): Data analysis pipeline — read_sql, transforms, visualization +- [Streamlit](https://github.com/cubrid-lab/cubrid-cookbook/tree/main/python/streamlit): Interactive data dashboard with live CUBRID queries +- [Celery](https://github.com/cubrid-lab/cubrid-cookbook/tree/main/python/celery): Async task queue — background jobs backed by CUBRID ## Node.js Examples -- [cubrid-client](https://github.com/cubrid-labs/cubrid-cookbook/tree/main/node/cubrid): Modern Promise-based client — connect, query, CRUD, transactions -- [Drizzle ORM](https://github.com/cubrid-labs/cubrid-cookbook/tree/main/node/drizzle): Type-safe ORM — schema, query builder, CRUD, transactions, custom types +- [cubrid-client](https://github.com/cubrid-lab/cubrid-cookbook/tree/main/node/cubrid): Modern Promise-based client — connect, query, CRUD, transactions +- [Drizzle ORM](https://github.com/cubrid-lab/cubrid-cookbook/tree/main/node/drizzle): Type-safe ORM — schema, query builder, CRUD, transactions, custom types ## Go Examples -- [cubrid-go](https://github.com/cubrid-labs/cubrid-cookbook/tree/main/go/cubrid-go): Pure Go database/sql driver — connect, query, CRUD, transactions -- [GORM](https://github.com/cubrid-labs/cubrid-cookbook/tree/main/go/gorm): GORM ORM — AutoMigrate, models, CRUD, relationships, advanced queries +- [cubrid-go](https://github.com/cubrid-lab/cubrid-cookbook/tree/main/go/cubrid-go): Pure Go database/sql driver — connect, query, CRUD, transactions +- [GORM](https://github.com/cubrid-lab/cubrid-cookbook/tree/main/go/gorm): GORM ORM — AutoMigrate, models, CRUD, relationships, advanced queries ## Drivers and ORMs -- [pycubrid](https://github.com/cubrid-labs/pycubrid): Pure Python DB-API 2.0 driver for CUBRID -- [sqlalchemy-cubrid](https://github.com/cubrid-labs/sqlalchemy-cubrid): SQLAlchemy 2.0 dialect for CUBRID -- [cubrid-client](https://github.com/cubrid-labs/cubrid-client): Modern TypeScript-first Node.js client for CUBRID -- [drizzle-cubrid](https://github.com/cubrid-labs/drizzle-cubrid): Drizzle ORM dialect for CUBRID -- [cubrid-go](https://github.com/cubrid-labs/cubrid-go): Pure Go CUBRID driver (database/sql + GORM) +- [pycubrid](https://github.com/cubrid-lab/pycubrid): Pure Python DB-API 2.0 driver for CUBRID +- [sqlalchemy-cubrid](https://github.com/cubrid-lab/sqlalchemy-cubrid): SQLAlchemy 2.0 dialect for CUBRID +- [cubrid-client](https://github.com/cubrid-lab/cubrid-client): Modern TypeScript-first Node.js client for CUBRID +- [drizzle-cubrid](https://github.com/cubrid-lab/drizzle-cubrid): Drizzle ORM dialect for CUBRID +- [cubrid-go](https://github.com/cubrid-lab/cubrid-go): Pure Go CUBRID driver (database/sql + GORM) - [CUBRID](https://www.cubrid.org/): The CUBRID database diff --git a/performance/README.md b/performance/README.md index 39c0dde..2b00813 100644 --- a/performance/README.md +++ b/performance/README.md @@ -2,7 +2,7 @@ Practical patterns to maximize performance with CUBRID + Python. -> 📊 All numbers are based on [cubrid-benchmark](https://github.com/cubrid-labs/cubrid-benchmark) experiment data. +> 📊 All numbers are based on [cubrid-benchmark](https://github.com/cubrid-lab/cubrid-benchmark) experiment data. > Environment: Intel i5-4200M, CUBRID 11.2, Python 3.12, pycubrid 0.5.0+16a8634 ## Benchmark Evidence @@ -48,4 +48,4 @@ Practical patterns to maximize performance with CUBRID + Python. --- -*Data source: [cubrid-benchmark/experiments/driver-comparison](https://github.com/cubrid-labs/cubrid-benchmark/tree/main/experiments/driver-comparison)* +*Data source: [cubrid-benchmark/experiments/driver-comparison](https://github.com/cubrid-lab/cubrid-benchmark/tree/main/experiments/driver-comparison)* diff --git a/performance/bulk-insert/README.md b/performance/bulk-insert/README.md index f5fbe63..bc812ee 100644 --- a/performance/bulk-insert/README.md +++ b/performance/bulk-insert/README.md @@ -105,4 +105,4 @@ Reducing COMMIT frequency is the single most effective optimization for write-he ## Benchmark Reference - INSERT execute: 7.10ms, COMMIT: 51.32ms -- Full details: [cubrid-benchmark/experiments/driver-comparison](https://github.com/cubrid-labs/cubrid-benchmark/tree/main/experiments/driver-comparison) +- Full details: [cubrid-benchmark/experiments/driver-comparison](https://github.com/cubrid-lab/cubrid-benchmark/tree/main/experiments/driver-comparison) diff --git a/performance/connection-pooling/README.md b/performance/connection-pooling/README.md index 3219889..895bdfd 100644 --- a/performance/connection-pooling/README.md +++ b/performance/connection-pooling/README.md @@ -101,4 +101,4 @@ engine = create_engine( ## Benchmark Reference - Connection creation: 1.66ms (optimized from 2.24ms, **−26%**) -- Full details: [cubrid-benchmark/experiments/driver-comparison](https://github.com/cubrid-labs/cubrid-benchmark/tree/main/experiments/driver-comparison) +- Full details: [cubrid-benchmark/experiments/driver-comparison](https://github.com/cubrid-lab/cubrid-benchmark/tree/main/experiments/driver-comparison) diff --git a/performance/fetch-optimization/README.md b/performance/fetch-optimization/README.md index e6b9c5e..5113cfb 100644 --- a/performance/fetch-optimization/README.md +++ b/performance/fetch-optimization/README.md @@ -84,4 +84,4 @@ for row in session.execute(stmt).scalars(): ## Benchmark Reference - SELECT 10K fetch: 96ms → 78ms after optimization (**−19%**) -- Full details: [cubrid-benchmark/experiments/driver-comparison](https://github.com/cubrid-labs/cubrid-benchmark/tree/main/experiments/driver-comparison) +- Full details: [cubrid-benchmark/experiments/driver-comparison](https://github.com/cubrid-lab/cubrid-benchmark/tree/main/experiments/driver-comparison) diff --git a/templates/async-worker/requirements.txt b/templates/async-worker/requirements.txt index 76ad1b0..b561c7d 100644 --- a/templates/async-worker/requirements.txt +++ b/templates/async-worker/requirements.txt @@ -1,4 +1,4 @@ celery[redis]>=5.3 sqlalchemy>=2.0 -sqlalchemy-cubrid @ git+https://github.com/cubrid-labs/sqlalchemy-cubrid.git@main -pycubrid @ git+https://github.com/cubrid-labs/pycubrid.git@main +sqlalchemy-cubrid @ git+https://github.com/cubrid-lab/sqlalchemy-cubrid.git@main +pycubrid @ git+https://github.com/cubrid-lab/pycubrid.git@main diff --git a/templates/batch-etl/requirements.txt b/templates/batch-etl/requirements.txt index 6ca3b42..f29715d 100644 --- a/templates/batch-etl/requirements.txt +++ b/templates/batch-etl/requirements.txt @@ -1,5 +1,5 @@ pandas>=2.0 sqlalchemy>=2.0 -sqlalchemy-cubrid @ git+https://github.com/cubrid-labs/sqlalchemy-cubrid.git@main -pycubrid @ git+https://github.com/cubrid-labs/pycubrid.git@main +sqlalchemy-cubrid @ git+https://github.com/cubrid-lab/sqlalchemy-cubrid.git@main +pycubrid @ git+https://github.com/cubrid-lab/pycubrid.git@main matplotlib>=3.7 diff --git a/templates/flask/requirements.txt b/templates/flask/requirements.txt index aba4af9..74be5bc 100644 --- a/templates/flask/requirements.txt +++ b/templates/flask/requirements.txt @@ -3,5 +3,5 @@ flask-sqlalchemy>=3.1.1 sqlalchemy>=2.0 pytest>=8.0.0 httpx>=0.27.0 -sqlalchemy-cubrid @ git+https://github.com/cubrid-labs/sqlalchemy-cubrid.git@main -pycubrid @ git+https://github.com/cubrid-labs/pycubrid.git@main +sqlalchemy-cubrid @ git+https://github.com/cubrid-lab/sqlalchemy-cubrid.git@main +pycubrid @ git+https://github.com/cubrid-lab/pycubrid.git@main