Skip to main content

YDB Dialect for SQLAlchemy

Project description

YDB Dialect for SQLAlchemy


License PyPI version API Reference Functional tests Style checks

This repository contains YQL dialect for SqlAlchemy 2.0.


Documentation: https://ydb-platform.github.io/ydb-sqlalchemy


Note: Dialect also works with SqlAlchemy 1.4, but it is not fully tested.

Installation

Via PyPI

To install ydb-sqlalchemy from PyPI:

$ pip install ydb-sqlalchemy

Installation from source code

To work with current ydb-sqlalchemy version clone this repo and run from source root:

$ pip install -U .

Getting started

Connect to local YDB using SqlAlchemy:

import sqlalchemy as sa


engine = sa.create_engine("yql+ydb://localhost:2136/local")

with engine.connect() as conn:
  rs = conn.execute(sa.text("SELECT 1 AS value"))
  print(rs.fetchone())

Authentication

To specify credentials, you should pass credentials object to connect_args argument of create_engine method.

Static Credentials

To use static credentials you should specify username and password as follows:

engine = sa.create_engine(
    "yql+ydb://localhost:2136/local",
    connect_args = {
        "credentials": {
            "username": "...",
            "password": "..."
        }
    }
)

Token Credentials

To use access token credentials you should specify token as follows:

engine = sa.create_engine(
    "yql+ydb://localhost:2136/local",
    connect_args = {
        "credentials": {
            "token": "..."
        }
    }
)

Service Account Credentials

To use service account credentials you should specify service_account_json as follows:

engine = sa.create_engine(
    "yql+ydb://localhost:2136/local",
    connect_args = {
        "credentials": {
            "service_account_json": {
                "id": "...",
                "service_account_id": "...",
                "created_at": "...",
                "key_algorithm": "...",
                "public_key": "...",
                "private_key": "..."
            }
        }
    }
)

Credentials from YDB SDK

To use any credentials that comes with ydb package, just pass credentials object as follows:

import ydb.iam

engine = sa.create_engine(
    "yql+ydb://localhost:2136/local",
    connect_args = {
        "credentials": ydb.iam.MetadataUrlCredentials()
    }
)

Migrations

To setup alembic to work with YDB please check this example.

Development

Run Tests:

Run the command from the root directory of the repository to start YDB in a local docker container.

$ docker-compose up

To run all tests execute the command from the root directory of the repository:

$ tox -e test-all

Run specific test:

$ tox -e test -- test/test_core.py

Check code style:

$ tox -e style

Reformat code:

$ tox -e isort
$ tox -e black-format

Run example (needs running local YDB):

$ python -m pip install virtualenv
$ virtualenv venv
$ source venv/bin/activate
$ pip install -r requirements.txt
$ python examples/example.py

Additional Notes

Pandas

It is possible to use YDB SA engine with pandas fuctions to_sql() and read_sql. However, there are some limitations:

  • to_sql method can not be used with column tables, since it is impossible to specify NOT NULL columns with current to_sql arguments. YDB requires column tables to have NOT NULL attribute on PK columns.

  • to_sql is not fully optimized to load huge datasets. It is recommended to use method="multi" and avoid setting a very large chunksize.

  • read_sql is not fully optimized to load huge datasets and could lead to significant memory consumptions.

Project details


Download files

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

Source Distribution

ydb_sqlalchemy-0.1.20.tar.gz (39.4 kB view details)

Uploaded Source

Built Distribution

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

ydb_sqlalchemy-0.1.20-py2.py3-none-any.whl (43.4 kB view details)

Uploaded Python 2Python 3

File details

Details for the file ydb_sqlalchemy-0.1.20.tar.gz.

File metadata

  • Download URL: ydb_sqlalchemy-0.1.20.tar.gz
  • Upload date:
  • Size: 39.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.0.0 CPython/3.12.13

File hashes

Hashes for ydb_sqlalchemy-0.1.20.tar.gz
Algorithm Hash digest
SHA256 64757038e5afafba1aff0c067e154abb9dc4a23b4ebc58af5aee1e5cb3ee013d
MD5 2efdbf19f8a0a1e0556658a6cc4c59cd
BLAKE2b-256 b6d15de1bfea4770de6d5ae61edd516110797c991e0de344aa227392f43a635b

See more details on using hashes here.

File details

Details for the file ydb_sqlalchemy-0.1.20-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for ydb_sqlalchemy-0.1.20-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 2282d0873326f233a33cc1abbcbfb81495d6d3c5776e75831cfb8eb7d11679f0
MD5 10b176643f20f356c593a099c14a6d34
BLAKE2b-256 be3743b04e13946f8cf0f1244576d5f0a5fd752fdbf9e2d46080cbefe0282b9b

See more details on using hashes here.

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