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.5a2.tar.gz (149.8 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.5a2-cp39-abi3-manylinux_2_28_aarch64.whl (8.5 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.28+ ARM64

tidbcloudlake_driver-0.1.5a2-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.5a2-cp39-abi3-macosx_11_0_arm64.whl (8.1 MB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

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

Uploaded CPython 3.8manylinux: glibc 2.28+ ARM64

tidbcloudlake_driver-0.1.5a2-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.5a2-cp38-cp38-macosx_11_0_arm64.whl (8.2 MB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

tidbcloudlake_driver-0.1.5a2-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.5a2.tar.gz.

File metadata

  • Download URL: tidbcloudlake_driver-0.1.5a2.tar.gz
  • Upload date:
  • Size: 149.8 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.5a2.tar.gz
Algorithm Hash digest
SHA256 479cd59fcd233d701d90313fe561bf52bdcc0ecaadefe362903a58e1b2b03533
MD5 383f1f382e04d6a7371c1863d237c5f6
BLAKE2b-256 daaf8c2fef136d9ecc9566d5bc37e3431c38984713d8f91d82a9fb193aa65af4

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tidbcloudlake_driver-0.1.5a2-cp39-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 606773afdfbe3adcee57fec99f5aa876d97dbe81b2b78cc4da578b211d7e5a61
MD5 acc01aca04ca1d1bc878c3a186092e5c
BLAKE2b-256 678290fd733438aa353cda0b11d5fcb9ee5ecaed65a80be4a33ed5d2cc299fae

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tidbcloudlake_driver-0.1.5a2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9e409ed2091b7d696ff223a762f2d8fc83824a87c5ba1e510ffd462c5ccf7078
MD5 9f98b359398764991a7bc32fe3fdd43b
BLAKE2b-256 29e5c8212dd3c844a0b72c4616d8db70d72d3387b90c1f86f4dce5f01bd67cbc

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tidbcloudlake_driver-0.1.5a2-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 71b2d2f0653533021627d47db4b402b92d3ccc21f2e8e030ffa41559f70cb287
MD5 995063258b1bd991ac78c421141f82da
BLAKE2b-256 b18a57256a008dbce85b118d0c144e19d523cfd5967b7263e7ff7c0a93311b57

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tidbcloudlake_driver-0.1.5a2-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 e0f1e45e66b580bb6f09aa7cfba84814e404e747a81a8918741a18005ba99744
MD5 9ac81d7348d6334bc37fb931e6c7bcb1
BLAKE2b-256 aed14a81584c69e979e7d9d8a9c463dd3862686ece4a48f6a6615dbbf5cd5532

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tidbcloudlake_driver-0.1.5a2-cp38-cp38-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 5906478a484174529e8caeb761187c6c9d43bae09749e9855096d2a2d8a799a1
MD5 57d6439cf200fe2971a4062cf0440a6f
BLAKE2b-256 43ca88cc593c689c254e4cf43fd04389e8fcb64763ce8d262980b52f07e9b4cc

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tidbcloudlake_driver-0.1.5a2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d7a7209f5e515523a95ef282666aec9dfccfd9044a2db671bda0c62b75740157
MD5 62f186a2fd728f6504c7bc83b21fb012
BLAKE2b-256 622318ac96b860b9b8e02e21f2258306f589af6da72ba17cdc2d6cab88a9b5b5

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tidbcloudlake_driver-0.1.5a2-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 45aa923e25c9404459c3cd2bb2a5db09ebeabd61c47cadb5021661da1b00053c
MD5 2559ebc53a5bc51db31d7218d1393f38
BLAKE2b-256 a07203572b537e890f1a658a2984f4ebaab855073c1417ac323b242a2b8a24e9

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tidbcloudlake_driver-0.1.5a2-cp38-cp38-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 ea5d93670fcaa46a68bd2d9a9de41db051deef00406f5f6bc97e7e9342dcb06c
MD5 18e151f40e734a42843328dca1edb9f9
BLAKE2b-256 45829f7392b84ce5fc09b0e61e2f4ff5b226c67a38313e0b5e3968155f8741d0

See more details on using hashes here.

Provenance

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