Skip to main content

TiDB Cloud Lake Python Driver

Project description

tidbcloudlake-driver

TiDB Cloud Lake Python Client

image License image

Usage

PEP 249 Cursor Object

from tidbcloudlake_driver import BlockingLakeClient

client = BlockingLakeClient('tidbcloudlake://root:root@localhost:8000/?sslmode=disable')
cursor = client.cursor()

cursor.execute(
    """
    CREATE TABLE test (
        i64 Int64,
        u64 UInt64,
        f64 Float64,
        s   String,
        s2  String,
        d   Date,
        t   DateTime
    )
    """
)
cursor.execute("INSERT INTO test VALUES (?, ?, ?, ?, ?, ?, ?)", (1, 1, 1.0, 'hello', 'world', '2021-01-01', '2021-01-01 00:00:00'))
cursor.execute("SELECT * FROM test")
rows = cursor.fetchall()
for row in rows:
    print(row.values())
cursor.close()

Blocking Connection Object

from tidbcloudlake_driver import BlockingLakeClient

client = BlockingLakeClient('tidbcloudlake://root:root@localhost:8000/?sslmode=disable')
conn = client.get_conn()
conn.exec(
    """
    CREATE TABLE test (
        i64 Int64,
        u64 UInt64,
        f64 Float64,
        s   String,
        s2  String,
        d   Date,
        t   DateTime
    )
    """
)
rows = conn.query_iter("SELECT * FROM test")
for row in rows:
    print(row.values())
conn.close()

Asyncio Connection Object

import asyncio
from tidbcloudlake_driver import AsyncLakeClient

async def main():
    client = AsyncLakeClient('tidbcloudlake://root:root@localhost:8000/?sslmode=disable')
    conn = await client.get_conn()
    await conn.exec(
        """
        CREATE TABLE test (
            i64 Int64,
            u64 UInt64,
            f64 Float64,
            s   String,
            s2  String,
            d   Date,
            t   DateTime
        )
        """
    )
    rows = await conn.query_iter("SELECT * FROM test")
    async for row in rows:
        print(row.values())
    await conn.close()

asyncio.run(main())

Parameter bindings

# Test with positional parameters
row = await context.conn.query_row("SELECT ?, ?, ?, ?", (3, False, 4, "55"))
row = await context.conn.query_row(
    "SELECT :a, :b, :c, :d", {"a": 3, "b": False, "c": 4, "d": "55"}
)
row = await context.conn.query_row(
    "SELECT ?", 3
)
row = await context.conn.query_row("SELECT ?, ?, ?, ?", params = (3, False, 4, "55"))

Query ID tracking and query management

# Get the last executed query ID
query_id = conn.last_query_id()
print(f"Last query ID: {query_id}")

# Execute a query and get its ID
await conn.query_row("SELECT 1")
query_id = conn.last_query_id()
print(f"Query ID: {query_id}")

# Kill a running query (if needed)
try:
    await conn.kill_query("some-query-id")
    print("Query killed successfully")
except Exception as e:
    print(f"Failed to kill query: {e}")

Type Mapping

TiDB Cloud Lake Types

General Data Types

TiDB Cloud Lake Python
BOOLEAN bool
TINYINT int
SMALLINT int
INT int
BIGINT int
FLOAT float
DOUBLE float
DECIMAL decimal.Decimal
DATE datetime.date
TIMESTAMP datetime.datetime
INTERVAL datetime.timedelta
VARCHAR str
BINARY bytes

Semi-Structured Data Types

TiDB Cloud Lake Python
ARRAY list
TUPLE tuple
MAP dict
VARIANT str
BITMAP str
GEOMETRY str
GEOGRAPHY str

Note: VARIANT is a json encoded string. Example:

CREATE TABLE example (
    data VARIANT
);
INSERT INTO example VALUES ('{"a": 1, "b": "hello"}');
row = await conn.query_row("SELECT * FROM example limit 1;")
data = row.values()[0]
value = json.loads(data)
print(value)

APIs

Exception Classes (PEP 249 Compliant)

The driver provides a complete set of exception classes that follow the PEP 249 standard for database interfaces:

# Base exceptions
class Warning(Exception): ...
class Error(Exception): ...

# Interface errors
class InterfaceError(Error): ...

# Database errors
class DatabaseError(Error): ...

# Specific database error types
class DataError(DatabaseError): ...
class OperationalError(DatabaseError): ...
class IntegrityError(DatabaseError): ...
class InternalError(DatabaseError): ...
class ProgrammingError(DatabaseError): ...
class NotSupportedError(DatabaseError): ...

These exceptions are automatically mapped from TiDB Cloud Lake error codes to appropriate PEP 249 exception types based on the nature of the error.

Note: stream_load and load_file support an optional method parameter, it accepts two string values:

  • stage: Data is first uploaded to a temporary stage and then loaded. This is the default behavior.
  • streaming: Data is directly streamed to the TiDB Cloud Lake server.

AsyncLakeClient

class AsyncLakeClient:
    def __init__(self, dsn: str): ...
    async def get_conn(self) -> AsyncLakeConnection: ...

AsyncLakeConnection

class AsyncLakeConnection:
    async def info(self) -> ConnectionInfo: ...
    async def version(self) -> str: ...
    async def close(self) -> None: ...
    def last_query_id(self) -> str | None: ...
    async def kill_query(self, query_id: str) -> None: ...
    async def exec(self, sql: str, params: list[string] | tuple[string] | any = None) -> int: ...
    async def query_row(self, sql: str, params: list[string] | tuple[string] | any = None) -> Row: ...
    async def query_iter(self, sql: str, params: list[string] | tuple[string] | any = None) -> RowIterator: ...
    async def stream_load(self, sql: str, data: list[list[str]], method: str = None) -> ServerStats: ...
    async def load_file(self, sql: str, file: str, method: str = None) -> ServerStats: ...

BlockingLakeClient

class BlockingLakeClient:
    def __init__(self, dsn: str): ...
    def get_conn(self) -> BlockingLakeConnection: ...
    def cursor(self) -> BlockingLakeCursor: ...

BlockingLakeConnection

class BlockingLakeConnection:
    def info(self) -> ConnectionInfo: ...
    def version(self) -> str: ...
    def close(self) -> None: ...
    def last_query_id(self) -> str | None: ...
    def kill_query(self, query_id: str) -> None: ...
    def exec(self, sql: str, params: list[string] | tuple[string] | any = None) -> int: ...
    def query_row(self, sql: str, params: list[string] | tuple[string] | any = None) -> Row: ...
    def query_iter(self, sql: str, params: list[string] | tuple[string] | any = None) -> RowIterator: ...
    def stream_load(self, sql: str, data: list[list[str]], method: str = None) -> ServerStats: ...
    def load_file(self, sql: str, file: str, method: str = None, format_option: dict = None, copy_options: dict = None) -> ServerStats: ...

BlockingLakeCursor

class BlockingLakeCursor:
    @property
    def description(self) -> list[tuple[str, str, int | None, int | None, int | None, int | None, bool | None]] | None: ...
    @property
    def rowcount(self) -> int: ...
    def close(self) -> None: ...
    def execute(self, operation: str, params: list[string] | tuple[string] = None) -> None | int: ...
    def executemany(self, operation: str, params: list[string] | tuple[string] = None, values: list[list[string] | tuple[string]]) -> None | int: ...
    def fetchone(self) -> Row | None: ...
    def fetchmany(self, size: int = 1) -> list[Row]: ...
    def fetchall(self) -> list[Row]: ...

    # Optional DB API Extensions
    def next(self) -> Row: ...
    def __next__(self) -> Row: ...
    def __iter__(self) -> BlockingLakeCursor: ...

Row

class Row:
    def values(self) -> tuple: ...
    def __len__(self) -> int: ...
    def __iter__(self) -> Row: ...
    def __next__(self) -> any: ...
    def __dict__(self) -> dict: ...
    def __getitem__(self, key: int | str) -> any: ...

RowIterator

class RowIterator:
    def schema(self) -> Schema: ...

    def __iter__(self) -> RowIterator: ...
    def __next__(self) -> Row: ...

    def __aiter__(self) -> RowIterator: ...
    async def __anext__(self) -> Row: ...

Field

class Field:
    @property
    def name(self) -> str: ...
    @property
    def data_type(self) -> str: ...

Schema

class Schema:
    def fields(self) -> list[Field]: ...

ServerStats

class ServerStats:
    @property
    def total_rows(self) -> int: ...
    @property
    def total_bytes(self) -> int: ...
    @property
    def read_rows(self) -> int: ...
    @property
    def read_bytes(self) -> int: ...
    @property
    def write_rows(self) -> int: ...
    @property
    def write_bytes(self) -> int: ...
    @property
    def running_time_ms(self) -> float: ...

ConnectionInfo

class ConnectionInfo:
    @property
    def handler(self) -> str: ...
    @property
    def host(self) -> str: ...
    @property
    def port(self) -> int: ...
    @property
    def user(self) -> str: ...
    @property
    def database(self) -> str | None: ...
    @property
    def warehouse(self) -> str | None: ...

Development

cd tests
make up
cd bindings/python
uv sync
source .venv/bin/activate
maturin develop --uv

behave tests/asyncio
behave tests/blocking
behave tests/cursor

Download files

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

Source Distribution

tidbcloudlake_driver-0.1.4.tar.gz (149.6 kB view details)

Uploaded Source

Built Distributions

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

tidbcloudlake_driver-0.1.4-cp39-abi3-manylinux_2_28_aarch64.whl (8.6 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.28+ ARM64

tidbcloudlake_driver-0.1.4-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (9.2 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ x86-64

tidbcloudlake_driver-0.1.4-cp39-abi3-macosx_11_0_arm64.whl (8.1 MB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

tidbcloudlake_driver-0.1.4-cp39-abi3-macosx_10_12_x86_64.whl (8.7 MB view details)

Uploaded CPython 3.9+macOS 10.12+ x86-64

tidbcloudlake_driver-0.1.4-cp38-cp38-manylinux_2_28_aarch64.whl (8.7 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.28+ ARM64

tidbcloudlake_driver-0.1.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (9.3 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

tidbcloudlake_driver-0.1.4-cp38-cp38-macosx_11_0_arm64.whl (8.2 MB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

tidbcloudlake_driver-0.1.4-cp38-cp38-macosx_10_12_x86_64.whl (8.8 MB view details)

Uploaded CPython 3.8macOS 10.12+ x86-64

File details

Details for the file tidbcloudlake_driver-0.1.4.tar.gz.

File metadata

  • Download URL: tidbcloudlake_driver-0.1.4.tar.gz
  • Upload date:
  • Size: 149.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for tidbcloudlake_driver-0.1.4.tar.gz
Algorithm Hash digest
SHA256 39e7fa4a69ad98cd80aa3a92a47e8b483cabdeef712ade6fe5f9245240a8f661
MD5 68721e646720c32adb81f93c7553ac53
BLAKE2b-256 6a3c3f0fb882938841f1cbcbbf6a3caa739b46acfa56e3b0d786b027058767bf

See more details on using hashes here.

Provenance

The following attestation bundles were made for tidbcloudlake_driver-0.1.4.tar.gz:

Publisher: release.yml on tidbcloud/lakesql

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tidbcloudlake_driver-0.1.4-cp39-abi3-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for tidbcloudlake_driver-0.1.4-cp39-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 1e89ee21d8a813c838e083df7750ccde73c41b65f0fbdf99b87bafdc8f866392
MD5 350430489775e42e2a96363b537a3959
BLAKE2b-256 4432d8c77ff572338a5bc03b999f218cb1291d7f73637fa403167128449ef351

See more details on using hashes here.

Provenance

The following attestation bundles were made for tidbcloudlake_driver-0.1.4-cp39-abi3-manylinux_2_28_aarch64.whl:

Publisher: release.yml on tidbcloud/lakesql

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tidbcloudlake_driver-0.1.4-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for tidbcloudlake_driver-0.1.4-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8b1afe42391de4707fb45e310afc7b74a8bf96ca7f9ad4cb6a78c1dd60c1712a
MD5 edd3789aa3b8c97f063a1aca45627ec8
BLAKE2b-256 750abf97e76e2f7fde88200ae17cc7ddac5f8fa36e03b9934bfcbc1ce1bd40bd

See more details on using hashes here.

Provenance

The following attestation bundles were made for tidbcloudlake_driver-0.1.4-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on tidbcloud/lakesql

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tidbcloudlake_driver-0.1.4-cp39-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for tidbcloudlake_driver-0.1.4-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 dc505dc8b514c66e34c15a78f09891f0db34863585ce35abbb45bc04a60a669a
MD5 b60c4c6a35fbaf7265656d19ee6cc4ce
BLAKE2b-256 f5a285bf06a43aea35fc7603cfa4df7ee1e3656cb480119673e5d2824d29976f

See more details on using hashes here.

Provenance

The following attestation bundles were made for tidbcloudlake_driver-0.1.4-cp39-abi3-macosx_11_0_arm64.whl:

Publisher: release.yml on tidbcloud/lakesql

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tidbcloudlake_driver-0.1.4-cp39-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for tidbcloudlake_driver-0.1.4-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 5f1684ff72e5f338b671f94f1d93cb10e2c4d8dae1310ae9eda2b8f8d660c42c
MD5 5a63dd994909802a7c5393ce69716f3a
BLAKE2b-256 79bab78e7e607e0e5eeb68c7e379c56e3252a39db1427562f61b0edd85736be1

See more details on using hashes here.

Provenance

The following attestation bundles were made for tidbcloudlake_driver-0.1.4-cp39-abi3-macosx_10_12_x86_64.whl:

Publisher: release.yml on tidbcloud/lakesql

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tidbcloudlake_driver-0.1.4-cp38-cp38-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for tidbcloudlake_driver-0.1.4-cp38-cp38-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 b08cd6fedd456f88c8f337dd234421d444687c7df3fe4cb3e4f91b34dbab704b
MD5 af7f52ba71f2395aa2a9efaf3cfad5dc
BLAKE2b-256 302e72581cce579e540cb1bf8c37008fec3f1f1de67879773c3ef7a515f4fcda

See more details on using hashes here.

Provenance

The following attestation bundles were made for tidbcloudlake_driver-0.1.4-cp38-cp38-manylinux_2_28_aarch64.whl:

Publisher: release.yml on tidbcloud/lakesql

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tidbcloudlake_driver-0.1.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for tidbcloudlake_driver-0.1.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7fdab100dbb2aa4e0f2fae8312861c4baff4275593452452b8677c3694f2abad
MD5 8f5ea0ea40558534459f9760aa9cc221
BLAKE2b-256 06c5fe0a1d728f0c020feb28ddf4cf48dbbbc4cb3cf30c9d95d5e9abc98cceab

See more details on using hashes here.

Provenance

The following attestation bundles were made for tidbcloudlake_driver-0.1.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on tidbcloud/lakesql

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tidbcloudlake_driver-0.1.4-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for tidbcloudlake_driver-0.1.4-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8d7b6bc11255e8a43dc881bfe07eb181795c77610457b961cc432b7940e1bf7b
MD5 f3d838d5ee950a11a4f37fab962906a3
BLAKE2b-256 c87254f456fe26854e8709b6f52062c02527bf973f714193ca1870e57618807f

See more details on using hashes here.

Provenance

The following attestation bundles were made for tidbcloudlake_driver-0.1.4-cp38-cp38-macosx_11_0_arm64.whl:

Publisher: release.yml on tidbcloud/lakesql

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tidbcloudlake_driver-0.1.4-cp38-cp38-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for tidbcloudlake_driver-0.1.4-cp38-cp38-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 e8b70f68a839b7c873b11d34acf0cea481c127a65d0b53bb94897c3bd23a7608
MD5 5ee7235f13d1d3a23e978fab6b386bf5
BLAKE2b-256 5bf31dd243b6ba47fea594e24d1e7e2df4d8e90eee78c88955dfb06883e2cf2e

See more details on using hashes here.

Provenance

The following attestation bundles were made for tidbcloudlake_driver-0.1.4-cp38-cp38-macosx_10_12_x86_64.whl:

Publisher: release.yml on tidbcloud/lakesql

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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