Quick Start

Installation

Prerequisites

  • Python 3.8 or higher;

  • pip version 9.0.1 or higher;

If necessary, upgrade your version of pip:

python -m pip install --upgrade pip

If you cannot upgrade pip due to a system-owned installation, you can run the example in a virtualenv:

python -m pip install virtualenv
virtualenv venv
source venv/bin/activate
python -m pip install --upgrade pip

Installation via Pypi

To install YDB Python SDK through Pypi execute the following command:

pip install ydb

Usage

Import Package

import ydb

Driver Initialization

endpoint = "grpc://localhost:2136"  # your ydb endpoint
database = "/local"  # your ydb database

with ydb.Driver(
    endpoint=endpoint,
    database=database,
    credentials=ydb.credentials_from_env_variables(),
) as driver:
    driver.wait(timeout=5, fail_fast=True)

SessionPool Initialization

with ydb.QuerySessionPool(driver) as pool:
    pass

Query Execution

Python SDK supports queries described by YQL syntax. There are two primary methods for executing queries, each with different properties and use cases:

  • pool.execute_with_retries:

    • Buffers the entire result set in client memory.

    • Automatically retries execution in case of retriable issues.

    • Does not allow specifying a transaction execution mode.

    • Recommended for one-off queries that are expected to produce small result sets.

  • tx.execute:

    • Returns an iterator over the query results, allowing processing of results that may not fit into client memory.

    • Retries must be handled manually via pool.retry_operation_sync.

    • Allows specifying a transaction execution mode.

    • Recommended for scenarios where pool.execute_with_retries is insufficient.

Usage of pool.execute_with_retries():

pool.execute_with_retries("DROP TABLE IF EXISTS example")
pool.execute_with_retries("CREATE TABLE example(key UInt64, value String, PRIMARY KEY (key))")

pool.execute_with_retries("INSERT INTO example (key, value) VALUES (1, 'luffy')")

res = pool.execute_with_retries("SELECT COUNT(*) AS rows_count FROM example")
>>> res[0].rows_count
1

Example of tx.execute():

def callee(session: ydb.QuerySessionSync):
    with session.transaction() as tx:
        with tx.execute(
            "INSERT INTO example (key, value) VALUES (2, 'zoro')"
        ):
            pass

        with tx.execute(
            "INSERT INTO example (key, value) VALUES (3, 'sanji')",
            commit_tx=True,
        ):
            pass

pool.retry_operation_sync(callee)