clickhousedb) baseado no driver principal. Ele é voltado para as APIs Core do SQLAlchemy e oferece suporte ao SQLAlchemy 1.4.40+ e 2.0.x.
Conecte-se com SQLAlchemy
clickhousedb:// ou clickhousedb+connect://. Os parâmetros de consulta correspondem a configurações do ClickHouse, opções do cliente e opções de transporte HTTP/TLS.
- Configurações do ClickHouse: passe como parâmetros de consulta (por exemplo,
use_skip_indexes=0). - Opções do cliente:
compression(alias paracompress),query_limit, timeouts e muito mais. - Opções de HTTP/TLS: opções para o pool HTTP e TLS (por exemplo,
ch_http_max_field_name_size=99999,ca_cert=certifi).
Consultas do Core
SELECT do SQLAlchemy Core com junções, filtros, ordenação, cláusulas LIMIT/OFFSET e DISTINCT.
DELETE com uma cláusula WHERE obrigatória:
DDL e reflexão
clickhousedb_default_type, clickhousedb_codec_expression e clickhousedb_ttl_expression, quando estiverem presentes no servidor.
Inserções (Core e ORM básico)
Escopo e limitações
- Foco principal: habilitar recursos do SQLAlchemy Core, como
SELECTcomJOINs (INNER,LEFT OUTER,FULL OUTER,CROSS),WHERE,ORDER BY,LIMIT/OFFSETeDISTINCT. DELETEapenas comWHERE: o dialeto oferece suporte a lightweightDELETE, mas exige uma cláusulaWHEREexplícita para evitar exclusões acidentais de toda a tabela. Para limpar uma tabela, useTRUNCATE TABLE.- Sem
UPDATE: o ClickHouse é otimizado para inserções. O dialeto não implementaUPDATE. Se você precisar alterar dados, aplique as transformações antes e reinsira os dados, ou use SQL textual explícito (por exemplo,ALTER TABLE ... UPDATE) por sua conta e risco. - DDL e reflexão: há suporte para criar bancos de dados e tabelas, e a reflexão retorna tipos de coluna e metadados de motores de tabela. Metadados tradicionais de PK/FK/índice não estão disponíveis, porque o ClickHouse não aplica essas restrições.
- Escopo do ORM: modelos declarativos e inserções via
Session.add(...)/bulk_save_objects(...)funcionam por conveniência. Recursos avançados do ORM (gerenciamento de relacionamentos, atualizações de unidade de trabalho, operações em cascata, semântica de carregamento eager/lazy) não são compatíveis. - Semântica de chave primária:
Column(..., primary_key=True)é usado pelo SQLAlchemy apenas para identidade de objeto. Isso não cria uma restrição no servidor no ClickHouse. DefinaORDER BY(ePRIMARY KEY, se desejado) por meio de motores de tabela (por exemplo,MergeTree(order_by=...)). - Transações e recursos do servidor: transações em duas fases, sequências,
RETURNINGe níveis avançados de isolamento não são compatíveis.engine.begin()fornece um gerenciador de contexto do Python para agrupar instruções, mas não executa nenhum controle transacional real (commit/rollback não têm efeito).