DBAPI2-like ODBC client with Apache Arrow support
Project description
zodbc
This odbc client tries to mirror pyodbc's interface and behavior, while also treating pyarrow compatibility as a first class citizen and providing various performance benefits. At the moment it is only tested with the msodbc driver. Compilation and installation is made easy by ziglang being a simple build dependency. The only system dependencies for compilation should be development headers for unixodbc (if on linux) and python.
Installation
pip install zodbc
On Linux you may also need the driver manager unixodbc as well as the odbc driver for your database, like msodbcsql.
Features
DB API 2
import zodbc
import os
con = zodbc.connect(os.environ["ODBC_CONSTR"]) # Connect with odbc connection string or DSN
cur = con.cursor() # Cursor, which translates to an odbc statement handle
# python parameters & return values, data types like str, int, bool, UUID, decimal, date, time, datetime
cur.execute("select ? a", [42])
assert cur.fetchone()[0] == 42
# Short hand alternative for getting column names from cur.description
assert [c[0] for c in cur.description] == cur.column_names == ["a"]
con.commit() # Transactions, autocommit is disabled by default
Fetch methods
- The DB API 2 fetch methods
fetchone,fetchmanyandfetchallreturn (lists of) Rows, which are essentially tuples that also allow named access. fetchtuplesreturns a list of tuples. Most performant option for fetching python typesfetchdictsreturns a list of dictionary records. Marginally less performant than tuples, but significantly more performant than fetching tuples and creating dictionarys from them.arrowreturns the entire result set as an Arrow Table. Best performance, as python type overhead is skipped entirelyarrow_batchreturns a single Arrow RecordBatch of specified size. Building block forarrow.
Apache Arrow
A query can be executed for every row in an Arrow RecordBatch.
import pyarrow as pa
cur.execute("drop table if exists t1")
cur.execute("create table t1(a int)")
cur.executemany_arrow(
"insert into t1(a) values(?)",
pa.RecordBatch.from_arrays([pa.array([1, 2, 3])], ["a"])
)
cur.execute("select * from t1").fetchall() # [(1,), (2,), (3,)]
Arrow RecordBatches can be used as a table valued parameter for MS SQL.
cur.execute("drop type if exists test_tabletype")
cur.execute("create type test_tabletype as table(a int)")
con.commit()
assert cur.execute(
"select sum(a) from ? where a <= ?",
[
zodbc.ArrowTVP(
zodbc.ArrowTVPType.from_name("test_tabletype"),
pa.RecordBatch.from_arrays([pa.array([1, 2, 3])], ["a"]),
),
2,
]
).fetchone()[0] == 3
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file zodbc-0.9.3.tar.gz.
File metadata
- Download URL: zodbc-0.9.3.tar.gz
- Upload date:
- Size: 35.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4e88ccf0e033a5927641e556316a8ae823779299e6a606d3ec15b0cf5cd2a277
|
|
| MD5 |
a1a8667bcc925e1e83083d992f954da5
|
|
| BLAKE2b-256 |
a088116913c0dfb5941f6ec63543aea1cdb7cd2c652918a07dfd1a6fee5fb0f3
|
File details
Details for the file zodbc-0.9.3-cp314-cp314-manylinux_2_27_x86_64.whl.
File metadata
- Download URL: zodbc-0.9.3-cp314-cp314-manylinux_2_27_x86_64.whl
- Upload date:
- Size: 3.9 MB
- Tags: CPython 3.14, manylinux: glibc 2.27+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3539bb392088998db9b95df063ec66817faa892e366c42a927a6082efee90b7c
|
|
| MD5 |
625663b8113b4b98f671d086c7fa1e2a
|
|
| BLAKE2b-256 |
b87270dbe3f1f01dc401a961013c895a1969d24f21a139ccdcd358196585d9ce
|
File details
Details for the file zodbc-0.9.3-cp313-cp313-manylinux_2_27_x86_64.whl.
File metadata
- Download URL: zodbc-0.9.3-cp313-cp313-manylinux_2_27_x86_64.whl
- Upload date:
- Size: 3.9 MB
- Tags: CPython 3.13, manylinux: glibc 2.27+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
29c468c2e64d5d717156eb11d82b86daee170b902f132fac975475d7f510681c
|
|
| MD5 |
d3c25883b9ee5cd5f344f25ab0e552bd
|
|
| BLAKE2b-256 |
b45ea1156260723dee4c9812c95cd7f7a44441a19145626a5a8009d9bfe32772
|
File details
Details for the file zodbc-0.9.3-cp312-cp312-manylinux_2_27_x86_64.whl.
File metadata
- Download URL: zodbc-0.9.3-cp312-cp312-manylinux_2_27_x86_64.whl
- Upload date:
- Size: 3.9 MB
- Tags: CPython 3.12, manylinux: glibc 2.27+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
060e011606f37e701a4c435cdb26b37f7fcd32e4f2f1f3edd2e68fe8be5b58e5
|
|
| MD5 |
a2008f7421fe36014c8ad23e87f728e3
|
|
| BLAKE2b-256 |
89f6c57027340e5accd0cc96d830fba75ec2011f7e68cfdbd41dafed43613518
|