clickhousedb) が含まれています。これは SQLAlchemy Core API を対象としており、SQLAlchemy 1.4.40+ および 2.0.x をサポートしています。
SQLAlchemy に接続する
clickhousedb:// または clickhousedb+connect:// の URL を使用してエンジンを作成します。クエリパラメータは、ClickHouse の設定、クライアントオプション、HTTP/TLS のトランスポートオプションに対応しています。
- ClickHouse settings: クエリパラメータとして渡します (例:
use_skip_indexes=0) 。 - クライアントオプション:
compression(compressのエイリアス) 、query_limit、タイムアウトなど。 - HTTP/TLS オプション: HTTP プールおよび TLS のオプション (例:
ch_http_max_field_name_size=99999、ca_cert=certifi) 。
Core クエリ
DISTINCT を含む SQLAlchemy Core の SELECT クエリをサポートしています。
WHERE句を指定した論理削除がサポートされています:
DDL とリフレクション
clickhousedb_default_type、clickhousedb_codec_expression、clickhousedb_ttl_expression などのダイアレクト固有の属性も含まれます。
挿入 (Core と基本的な ORM)
対象範囲と制限事項
- 主な対象:
JOIN(INNER、LEFT OUTER、FULL OUTER、CROSS) を含むSELECT、WHERE、ORDER BY、LIMIT/OFFSET、DISTINCTなど、SQLAlchemy Core の機能を利用できます。 WHERE付きのDELETEのみ: この ダイアレクト は論理削除のDELETEをサポートしますが、誤ってテーブル全体を削除しないよう、明示的なWHERE句が必要です。テーブルを空にするには、TRUNCATE TABLEを使用してください。UPDATEなし: ClickHouse は追記に最適化されています。この ダイアレクト ではUPDATEは実装されていません。データを変更する必要がある場合は、上流で変換して再挿入するか、自己責任で明示的なテキスト SQL (たとえばALTER TABLE ... UPDATE) を使用してください。- DDL とリフレクション: データベースとテーブルの作成をサポートしており、リフレクションではカラム型とテーブルエンジンのメタデータが返されます。ClickHouse はこれらの制約を強制しないため、従来の PK/FK/索引 のメタデータはありません。
- ORM の対象範囲: 便宜上、宣言的モデルと
Session.add(...)/bulk_save_objects(...)による insert は利用できます。高度な ORM 機能 (リレーションシップ管理、unit-of-work による更新、カスケード、eager/lazy loading のセマンティクス) はサポートされていません。 - 主キーの意味合い:
Column(..., primary_key=True)は、SQLAlchemy でオブジェクト識別のためにのみ使用されます。ClickHouse 側にサーバー側の制約が作成されるわけではありません。ORDER BY(および必要に応じてPRIMARY KEY) は、テーブルエンジン経由で定義してください (たとえばMergeTree(order_by=...)) 。 - トランザクションとサーバー機能: 二相トランザクション、数列、
RETURNING、高度な分離レベルはサポートされていません。engine.begin()はステートメントをまとめるための Python のコンテキストマネージャを提供しますが、実際のトランザクション制御は行いません (commit/rollback は no-op です) 。