Pular para o conteúdo principal
O ClickHouse Connect inclui um dialeto SQLAlchemy (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

Crie um engine usando URLs 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.
Observações sobre parâmetros de URL/consulta:
  • Configurações do ClickHouse: passe como parâmetros de consulta (por exemplo, use_skip_indexes=0).
  • Opções do cliente: compression (alias para compress), 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).
Consulte Argumentos de conexão e Configurações nas seções abaixo para ver a lista completa de opções suportadas. Elas também podem ser fornecidas por meio do DSN do SQLAlchemy.

Consultas do Core

O dialeto oferece suporte a consultas SELECT do SQLAlchemy Core com junções, filtros, ordenação, cláusulas LIMIT/OFFSET e DISTINCT.
Há suporte a Lightweight DELETE com uma cláusula WHERE obrigatória:

DDL e reflexão

Você pode criar bancos de dados e tabelas usando os auxiliares de DDL fornecidos e os construtos de tipo/engine. Há suporte à reflexão de tabelas (incluindo tipos de coluna e engine).
As colunas refletidas incluem atributos específicos do dialeto, como clickhousedb_default_type, clickhousedb_codec_expression e clickhousedb_ttl_expression, quando estiverem presentes no servidor.

Inserções (Core e ORM básico)

As inserções funcionam tanto com o SQLAlchemy Core quanto com modelos ORM simples, para maior praticidade.

Escopo e limitações

  • Foco principal: habilitar recursos do SQLAlchemy Core, como SELECT com JOINs (INNER, LEFT OUTER, FULL OUTER, CROSS), WHERE, ORDER BY, LIMIT/OFFSET e DISTINCT.
  • DELETE apenas com WHERE: o dialeto oferece suporte a lightweight DELETE, mas exige uma cláusula WHERE explícita para evitar exclusões acidentais de toda a tabela. Para limpar uma tabela, use TRUNCATE TABLE.
  • Sem UPDATE: o ClickHouse é otimizado para inserções. O dialeto não implementa UPDATE. 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. Defina ORDER BY (e PRIMARY 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, RETURNING e 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).
Última modificação em 2 de julho de 2026