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.3a1.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.3a1-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.3a1-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.3a1-cp39-abi3-macosx_11_0_arm64.whl (8.1 MB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

tidbcloudlake_driver-0.1.3a1-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.3a1-cp38-cp38-manylinux_2_28_aarch64.whl (8.7 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.28+ ARM64

tidbcloudlake_driver-0.1.3a1-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.3a1-cp38-cp38-macosx_11_0_arm64.whl (8.2 MB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

tidbcloudlake_driver-0.1.3a1-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.3a1.tar.gz.

File metadata

  • Download URL: tidbcloudlake_driver-0.1.3a1.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.3a1.tar.gz
Algorithm Hash digest
SHA256 be595a856204348a16f5180812f73ba902691bfddbad7f3e7d381333ad93b64e
MD5 59a4b35ae98cb5f002e8e7d18646b43c
BLAKE2b-256 3ede1c367a008d594731c7cd2cf9e6fd1079b1648814a793b0a60f395286eb61

See more details on using hashes here.

Provenance

The following attestation bundles were made for tidbcloudlake_driver-0.1.3a1.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.3a1-cp39-abi3-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for tidbcloudlake_driver-0.1.3a1-cp39-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 e43ee4d12e1ccf98cbc2d40751bb7b7b1a47985958c5b6809511f3313bbb1b29
MD5 cb2f8dbd2a3a4c467893d06184459f50
BLAKE2b-256 f63362819b5ee0675d07940fc0dbf84cd51f58505aba567a2e63461da3c5cb7a

See more details on using hashes here.

Provenance

The following attestation bundles were made for tidbcloudlake_driver-0.1.3a1-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.3a1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for tidbcloudlake_driver-0.1.3a1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 902e9f26e313106d9e77cf389a8e747d576f1858535b9e56a4f218bc5ed3b665
MD5 c57fefa5dc7e1b3658d0dc2f72530c35
BLAKE2b-256 d994a5a058447ba337ee06c7753c9d7344f73efb748ba4f3cf6bfc732539e68d

See more details on using hashes here.

Provenance

The following attestation bundles were made for tidbcloudlake_driver-0.1.3a1-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.3a1-cp39-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for tidbcloudlake_driver-0.1.3a1-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2462e08360cf3db45913818b999756daa2366fad74a6a459dfd94a69b35f386a
MD5 5ebcbf05c9d1c181078b3757f6232779
BLAKE2b-256 5e0a7dd576d8fd673a446d266b8b7c5afc93ba323486169561924564d539b2c0

See more details on using hashes here.

Provenance

The following attestation bundles were made for tidbcloudlake_driver-0.1.3a1-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.3a1-cp39-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for tidbcloudlake_driver-0.1.3a1-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 eac89ef77eaa20869e97feb3ffd2d3586b857d36feacfbd6ba25ffa6c7570c1e
MD5 71986b3ee1826e5fd7a9e69c2063ea84
BLAKE2b-256 96ffe2b57a820ba6f5e30eaadfa7422938614055a10b08d847842fecb007468c

See more details on using hashes here.

Provenance

The following attestation bundles were made for tidbcloudlake_driver-0.1.3a1-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.3a1-cp38-cp38-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for tidbcloudlake_driver-0.1.3a1-cp38-cp38-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 a46c668c0d6796cc21d271592dbd3c716290e491159df865fcffa71698f89a38
MD5 3a68b026cf9f75c32ca2885d5acd1f6d
BLAKE2b-256 cd89ef9dcee0a49a32989f887aeda9ed4d2111ca2439a7d79fadb4504ca93624

See more details on using hashes here.

Provenance

The following attestation bundles were made for tidbcloudlake_driver-0.1.3a1-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.3a1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for tidbcloudlake_driver-0.1.3a1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3f2ff5d29f0ba0d71ebea9497ea257b39b4804af8e8e43c1354c1ea67823d77e
MD5 ad392048dc16e013cb4576ccb90ac184
BLAKE2b-256 0ae53ff8942de775a770610b1eecde2ff75e1f58856718736c939363f907cb0b

See more details on using hashes here.

Provenance

The following attestation bundles were made for tidbcloudlake_driver-0.1.3a1-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.3a1-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for tidbcloudlake_driver-0.1.3a1-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0ea6642f2d20fd32f5251c9284c6f2fb47d0cdb5e275202f3ae79b95cff09e95
MD5 e22d6729cf0f1a632fd0ab773face228
BLAKE2b-256 978934a15c1700e8b5820f12584ebb943d85609272b5a2da8ec526ef24e435c7

See more details on using hashes here.

Provenance

The following attestation bundles were made for tidbcloudlake_driver-0.1.3a1-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.3a1-cp38-cp38-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for tidbcloudlake_driver-0.1.3a1-cp38-cp38-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 b2e5a1e19fcd81253c817d4027f8b58366fb35144d06e5ca48cc3c18b9da3366
MD5 99cd0dca28e4f4b8899ac6d55fa990bf
BLAKE2b-256 58f4a5142de2960c1b48019276e8de462b5dfb1befeab4c7446589c42dc8950e

See more details on using hashes here.

Provenance

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