px
pypx

clickhouse-sqlalchemy

v0.3.2

Simple ClickHouse SQLAlchemy Dialect

44 KB Python 3.7+ MIT License
Diff
$ uv add clickhouse-sqlalchemy

ClickHouse SQLAlchemy

ClickHouse dialect for SQLAlchemy to ClickHouse database.

Documentation

Documentation is available at https://clickhouse-sqlalchemy.readthedocs.io.

Usage

Supported interfaces:

  • native [recommended] (TCP) via clickhouse-driver <https://github.com/mymarilyn/clickhouse-driver>
  • async native (TCP) via asynch <https://github.com/long2ice/asynch>
  • http via requests

Define table

from sqlalchemy import create_engine, Column, MetaData

from clickhouse_sqlalchemy import (
    Table, make_session, get_declarative_base, types, engines
)

uri = 'clickhouse+native://localhost/default'

engine = create_engine(uri)
session = make_session(engine)
metadata = MetaData(bind=engine)

Base = get_declarative_base(metadata=metadata)

class Rate(Base):
    day = Column(types.Date, primary_key=True)
    value = Column(types.Int32)

    __table_args__ = (
        engines.Memory(),
    )

Rate.__table__.create()

Insert some data

from datetime import date, timedelta

from sqlalchemy import func

today = date.today()
rates = [
    {'day': today - timedelta(i), 'value': 200 - i}
    for i in range(100)
]

And query inserted data

session.execute(Rate.__table__.insert(), rates)

session.query(func.count(Rate.day)) \
    .filter(Rate.day > today - timedelta(20)) \
    .scalar()

License

ClickHouse SQLAlchemy is distributed under the MIT license.

Details

Version
0.3.2
License
MIT License
Python
<4,>=3.7
Maintainer
Konstantin Lebedev

Maintainers