Skip to main content

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, fetchmany and fetchall return (lists of) Rows, which are essentially tuples that also allow named access.
  • fetchtuples returns a list of tuples. Most performant option for fetching python types
  • fetchdicts returns a list of dictionary records. Marginally less performant than tuples, but significantly more performant than fetching tuples and creating dictionarys from them.
  • arrow returns the entire result set as an Arrow Table. Best performance, as python type overhead is skipped entirely
  • arrow_batch returns a single Arrow RecordBatch of specified size. Building block for arrow.

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

zodbc-0.9.3.tar.gz (35.2 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

zodbc-0.9.3-cp314-cp314-manylinux_2_27_x86_64.whl (3.9 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.27+ x86-64

zodbc-0.9.3-cp313-cp313-manylinux_2_27_x86_64.whl (3.9 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ x86-64

zodbc-0.9.3-cp312-cp312-manylinux_2_27_x86_64.whl (3.9 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ x86-64

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

Hashes for zodbc-0.9.3.tar.gz
Algorithm Hash digest
SHA256 4e88ccf0e033a5927641e556316a8ae823779299e6a606d3ec15b0cf5cd2a277
MD5 a1a8667bcc925e1e83083d992f954da5
BLAKE2b-256 a088116913c0dfb5941f6ec63543aea1cdb7cd2c652918a07dfd1a6fee5fb0f3

See more details on using hashes here.

File details

Details for the file zodbc-0.9.3-cp314-cp314-manylinux_2_27_x86_64.whl.

File metadata

File hashes

Hashes for zodbc-0.9.3-cp314-cp314-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 3539bb392088998db9b95df063ec66817faa892e366c42a927a6082efee90b7c
MD5 625663b8113b4b98f671d086c7fa1e2a
BLAKE2b-256 b87270dbe3f1f01dc401a961013c895a1969d24f21a139ccdcd358196585d9ce

See more details on using hashes here.

File details

Details for the file zodbc-0.9.3-cp313-cp313-manylinux_2_27_x86_64.whl.

File metadata

File hashes

Hashes for zodbc-0.9.3-cp313-cp313-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 29c468c2e64d5d717156eb11d82b86daee170b902f132fac975475d7f510681c
MD5 d3c25883b9ee5cd5f344f25ab0e552bd
BLAKE2b-256 b45ea1156260723dee4c9812c95cd7f7a44441a19145626a5a8009d9bfe32772

See more details on using hashes here.

File details

Details for the file zodbc-0.9.3-cp312-cp312-manylinux_2_27_x86_64.whl.

File metadata

File hashes

Hashes for zodbc-0.9.3-cp312-cp312-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 060e011606f37e701a4c435cdb26b37f7fcd32e4f2f1f3edd2e68fe8be5b58e5
MD5 a2008f7421fe36014c8ad23e87f728e3
BLAKE2b-256 89f6c57027340e5accd0cc96d830fba75ec2011f7e68cfdbd41dafed43613518

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page