clickhousedb) basé sur le pilote principal. Il est destiné aux API SQLAlchemy Core et prend en charge SQLAlchemy 1.4.40+ et 2.0.x.
Se connecter avec SQLAlchemy
clickhousedb:// ou clickhousedb+connect://. Les paramètres de requête correspondent aux paramètres ClickHouse, aux options du client et aux options de transport HTTP/TLS.
- Paramètres de ClickHouse : à transmettre comme paramètres de requête (par exemple,
use_skip_indexes=0). - Options du client :
compression(alias decompress),query_limit, délais d’expiration, etc. - Options HTTP/TLS : options pour le pool HTTP et TLS (par exemple,
ch_http_max_field_name_size=99999,ca_cert=certifi).
Requêtes Core
SELECT de SQLAlchemy Core avec des jointures, des filtres, le tri, des clauses LIMIT/OFFSET et DISTINCT.
DELETE léger avec clause WHERE obligatoire est pris en charge :
DDL et introspection
clickhousedb_default_type, clickhousedb_codec_expression et clickhousedb_ttl_expression, lorsqu’ils sont présents sur le serveur.
Insertions (Core et ORM de base)
Portée et limites
- Objectif principal : prendre en charge les fonctionnalités de SQLAlchemy Core comme
SELECTavec desJOIN(INNER,LEFT OUTER,FULL OUTER,CROSS),WHERE,ORDER BY,LIMIT/OFFSETetDISTINCT. DELETEavecWHEREuniquement : le dialecte prend en charge leDELETEléger, mais exige une clauseWHEREexplicite pour éviter les suppressions accidentelles de tables entières. Pour vider une table, utilisezTRUNCATE TABLE.- Pas de
UPDATE: ClickHouse est optimisé pour l’ajout. Le dialecte n’implémente pasUPDATE. Si vous devez modifier des données, appliquez les transformations en amont puis réinsérez-les, ou utilisez du SQL textuel explicite (par exemple,ALTER TABLE ... UPDATE) à vos risques et périls. - DDL et introspection : la création de bases de données et de tables est prise en charge, et l’introspection renvoie les types de colonnes ainsi que les métadonnées du moteur de table. Les métadonnées traditionnelles de PK/FK/index ne sont pas disponibles, car ClickHouse n’applique pas ces contraintes.
- Portée de l’ORM : les modèles déclaratifs et les insertions via
Session.add(...)/bulk_save_objects(...)fonctionnent à des fins pratiques. Les fonctionnalités ORM avancées (gestion des relations, mises à jour unit-of-work, cascade, sémantique de chargement eager/lazy) ne sont pas prises en charge. - Sémantique de clé primaire :
Column(..., primary_key=True)est utilisé par SQLAlchemy uniquement pour l’identité des objets. Cela ne crée pas de contrainte côté serveur dans ClickHouse. DéfinissezORDER BY(et éventuellementPRIMARY KEY) via les moteurs de table (par exemple,MergeTree(order_by=...)). - Transactions et fonctionnalités du serveur : les transactions en deux phases, les séquences,
RETURNINGet les niveaux d’isolation avancés ne sont pas pris en charge.engine.begin()fournit un gestionnaire de contexte Python pour regrouper des instructions, mais n’effectue aucun contrôle transactionnel réel (commit/rollbacksont sans effet).