Saltar al contenido principal
ClickHouse Connect incluye un dialecto de SQLAlchemy (clickhousedb) basado en el driver principal. Está orientado a las API de SQLAlchemy Core y es compatible con SQLAlchemy 1.4.40+ y 2.0.x.

Conectarse con SQLAlchemy

Cree un motor con las URL clickhousedb:// o clickhousedb+connect://. Los parámetros de consulta se asignan a ajustes de ClickHouse, opciones del cliente y opciones de transporte HTTP/TLS.
Notas sobre los parámetros de URL y de consulta:
  • Ajustes de ClickHouse: páselos como parámetros de consulta (por ejemplo, use_skip_indexes=0).
  • Opciones del cliente: compression (alias de compress), query_limit, tiempos de espera y más.
  • Opciones de HTTP/TLS: opciones para el pool de conexiones HTTP y TLS (por ejemplo, ch_http_max_field_name_size=99999, ca_cert=certifi).
Consulte Argumentos de conexión y ajustes en las secciones siguientes para ver la lista completa de opciones compatibles. También pueden proporcionarse mediante el DSN de SQLAlchemy.

Consultas de SQLAlchemy Core

El dialecto admite consultas SELECT de SQLAlchemy Core con JOIN, filtros, ordenación, límites y OFFSET, y DISTINCT.
Se admite la eliminación ligera DELETE con una cláusula WHERE obligatoria:

DDL y reflexión

Puede crear bases de datos y tablas con las utilidades auxiliares de DDL y los constructos de tipo y motor proporcionados. Se admite la reflexión de tablas (incluidos los tipos de columna y el motor).
Las columnas reflejadas incluyen atributos específicos del dialecto, como clickhousedb_default_type, clickhousedb_codec_expression y clickhousedb_ttl_expression, cuando estos están presentes en el servidor.

Inserciones (Core y ORM básico)

Las inserciones funcionan tanto con SQLAlchemy Core como con modelos ORM sencillos, para mayor comodidad.

Alcance y limitaciones

  • Enfoque principal: Habilitar capacidades de SQLAlchemy Core como SELECT con JOINs (INNER, LEFT OUTER, FULL OUTER, CROSS), WHERE, ORDER BY, LIMIT/OFFSET y DISTINCT.
  • DELETE solo con WHERE: El dialecto admite la eliminación ligera DELETE, pero requiere una cláusula WHERE explícita para evitar eliminaciones accidentales de toda la tabla. Para vaciar una tabla, use TRUNCATE TABLE.
  • Sin UPDATE: ClickHouse está optimizado para inserciones. El dialecto no implementa UPDATE. Si necesita cambiar datos, aplique las transformaciones antes de la inserción y vuelva a insertarlos, o use SQL textual explícito (por ejemplo, ALTER TABLE ... UPDATE) bajo su propia responsabilidad.
  • DDL y reflexión: Se admite la creación de bases de datos y tablas, y la reflexión devuelve tipos de columna y metadatos del motor de tabla. Los metadatos tradicionales de PK/FK/índices no están presentes porque ClickHouse no aplica esas restricciones.
  • Alcance del ORM: Los modelos declarativos y las inserciones mediante Session.add(...)/bulk_save_objects(...) funcionan como opción práctica. Las capacidades avanzadas del ORM (gestión de relaciones, actualizaciones de unidad de trabajo, cascadas y semánticas de carga eager/lazy) no son compatibles.
  • Semántica de la clave primaria: SQLAlchemy usa Column(..., primary_key=True) solo para la identidad de los objetos. No crea una restricción en el servidor en ClickHouse. Defina ORDER BY (y PRIMARY KEY, si corresponde) mediante motores de tabla (por ejemplo, MergeTree(order_by=...)).
  • Transacciones y funciones del servidor: No se admiten transacciones en dos fases, secuencias, RETURNING ni niveles avanzados de aislamiento. engine.begin() proporciona un administrador de contexto de Python para agrupar sentencias, pero no realiza ningún control real de transacciones (commit/rollback no tienen efecto).
Última modificación el 19 de junio de 2026