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('lake://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('lake://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('lake://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)

GEOMETRY and GEOGRAPHY follow the current geometry_output_format setting. Text formats such as GeoJSON or WKT return str; binary formats such as WKB or EWKB return bytes.

For example:

row = await conn.query_row("settings(geometry_output_format='WKB') SELECT st_point(60, 37)")
assert isinstance(row.values()[0], bytes)

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.5a5.tar.gz (151.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.5a5-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.5a5-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.5a5-cp39-abi3-macosx_11_0_arm64.whl (8.1 MB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

tidbcloudlake_driver-0.1.5a5-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.5a5-cp38-cp38-manylinux_2_28_aarch64.whl (8.8 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.28+ ARM64

tidbcloudlake_driver-0.1.5a5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (9.4 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

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

Uploaded CPython 3.8macOS 11.0+ ARM64

tidbcloudlake_driver-0.1.5a5-cp38-cp38-macosx_10_12_x86_64.whl (8.9 MB view details)

Uploaded CPython 3.8macOS 10.12+ x86-64

File details

Details for the file tidbcloudlake_driver-0.1.5a5.tar.gz.

File metadata

  • Download URL: tidbcloudlake_driver-0.1.5a5.tar.gz
  • Upload date:
  • Size: 151.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.5a5.tar.gz
Algorithm Hash digest
SHA256 88a7f2e0a6a54c14a3625d6f574e793d26ba4ca58bc5a759b6df06fe5361afca
MD5 fdeff79feca29cbd0dac877a2c5c92b6
BLAKE2b-256 798869fc1b90b7cb4a587587bcc5297bf86fea4e3bdd69089d073c32fd454439

See more details on using hashes here.

Provenance

The following attestation bundles were made for tidbcloudlake_driver-0.1.5a5.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.5a5-cp39-abi3-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for tidbcloudlake_driver-0.1.5a5-cp39-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 433852bc2d1775990db1bcacc6be9031dc8634e95f0444202010dc4ebe9233f1
MD5 5012fede8d581ea1d77f6bacecf4bee7
BLAKE2b-256 95eebd29ac393c99af7a936cc0691c8c35a4396fc6454ee7e2499e5f15bb179e

See more details on using hashes here.

Provenance

The following attestation bundles were made for tidbcloudlake_driver-0.1.5a5-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.5a5-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for tidbcloudlake_driver-0.1.5a5-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 cfa5effe73ea68b4b70484a62df6ebe5b46d0261b903934701863789a5eff9ba
MD5 74d7a8473cb926d77c5664ecafc6143b
BLAKE2b-256 206e7c21fd0118bf1d7c8886027f57b0458402602d92bd1a53070611bda7e106

See more details on using hashes here.

Provenance

The following attestation bundles were made for tidbcloudlake_driver-0.1.5a5-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.5a5-cp39-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for tidbcloudlake_driver-0.1.5a5-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d088459902b588af48ff6012a6a92d6a57d8e5c357fda0c46f73aeb89155ae9a
MD5 2a6fdcb01a2d45981e51d73a6a1f5de1
BLAKE2b-256 e98689156136a5f9b30f53afc5acc09696ef1dadaf63bad22710034d5b333f42

See more details on using hashes here.

Provenance

The following attestation bundles were made for tidbcloudlake_driver-0.1.5a5-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.5a5-cp39-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for tidbcloudlake_driver-0.1.5a5-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 aae27de349007d2ad5c922d3da43c5f6784a9277bd792f3807389b33ae05a624
MD5 9993250868745290f5f2c7bae502912f
BLAKE2b-256 aab633145d18cbde75e67f886707030ba5eb89b6a1ff365d97b61d8c6ae15dab

See more details on using hashes here.

Provenance

The following attestation bundles were made for tidbcloudlake_driver-0.1.5a5-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.5a5-cp38-cp38-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for tidbcloudlake_driver-0.1.5a5-cp38-cp38-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 afd756621c9ce7117b6b842e545796debb5f95626c920a805d9240dd3c728c0e
MD5 14ecb435cb8e7af541f7bfc954d9f9ba
BLAKE2b-256 3f0673baf16b8b38ccbf266703bc9bc6f2154e413f9e08d35ed7bb4bda70fec9

See more details on using hashes here.

Provenance

The following attestation bundles were made for tidbcloudlake_driver-0.1.5a5-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.5a5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for tidbcloudlake_driver-0.1.5a5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c11d0ad1be09c4d66006e544bf3dbf523a533cc5cc59c1fb010c1ac701335ce6
MD5 905a355e7de59a0b2bc7db13dcc6163b
BLAKE2b-256 6ce9525ec91291562dda7308f703715b5360fd782826f3b3883da10838179036

See more details on using hashes here.

Provenance

The following attestation bundles were made for tidbcloudlake_driver-0.1.5a5-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.5a5-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for tidbcloudlake_driver-0.1.5a5-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 31149f3d40c1c11a175a24960d1c92e533aaeb571b87cd0be6cea4afc1f31025
MD5 f4cfb24347d8c9eda5ab2a962f83020f
BLAKE2b-256 a8492fc09eb8733c5fe04d550d6ef98c662aa9f33868395e9ab5f538b2173ffe

See more details on using hashes here.

Provenance

The following attestation bundles were made for tidbcloudlake_driver-0.1.5a5-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.5a5-cp38-cp38-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for tidbcloudlake_driver-0.1.5a5-cp38-cp38-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 71e76a3b4997b0f04dae3c15a75d563485e8814ed3b676a7966a4daf236c1757
MD5 0b15666c35262cf8d52f47d1e4446b7c
BLAKE2b-256 2ca633efb7cc4f1fc17846447220e0095a58a5a7bb1ee4a7d76cf951802e588f

See more details on using hashes here.

Provenance

The following attestation bundles were made for tidbcloudlake_driver-0.1.5a5-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