Quickstart

This page gives a good introduction to clickhouse-sqlalchemy. It assumes you already have clickhouse-sqlalchemy installed. If you do not, head over to the Installation section.

It should be pointed that session must be created with clickhouse_sqlalchemy.make_session. Otherwise session.query and session.execute will not have ClickHouse SQL extensions. The same is applied to Table and get_declarative_base.

Let’s define some table, insert data into it and query inserted data.

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(),
    )

# Emits CREATE TABLE statement
Rate.__table__.create()

Now it’s time to 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)
]

Let’s query inserted data

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

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

Now you are ready to configure your connection and see more ClickHouse features support.