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
clickhousedb:// o clickhousedb+connect://. Los parámetros de consulta se asignan a ajustes de ClickHouse, opciones del cliente y opciones de transporte HTTP/TLS.
- Ajustes de ClickHouse: páselos como parámetros de consulta (por ejemplo,
use_skip_indexes=0). - Opciones del cliente:
compression(alias decompress),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).
Consultas de SQLAlchemy Core
SELECT de SQLAlchemy Core con JOIN, filtros, ordenación, límites y OFFSET, y DISTINCT.
DELETE con una cláusula WHERE obligatoria:
DDL y reflexión
clickhousedb_default_type, clickhousedb_codec_expression y clickhousedb_ttl_expression, cuando estos están presentes en el servidor.
Inserciones (Core y ORM básico)
Alcance y limitaciones
- Enfoque principal: Habilitar capacidades de SQLAlchemy Core como
SELECTconJOINs (INNER,LEFT OUTER,FULL OUTER,CROSS),WHERE,ORDER BY,LIMIT/OFFSETyDISTINCT. DELETEsolo conWHERE: El dialecto admite la eliminación ligeraDELETE, pero requiere una cláusulaWHEREexplícita para evitar eliminaciones accidentales de toda la tabla. Para vaciar una tabla, useTRUNCATE TABLE.- Sin
UPDATE: ClickHouse está optimizado para inserciones. El dialecto no implementaUPDATE. 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. DefinaORDER BY(yPRIMARY 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,
RETURNINGni 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).