Pase argumentos con nombre para las factorías de Client y los métodos con muchos parámetros opcionales.Los métodos que no se documentan aquí no se consideran parte de la API y pueden eliminarse o modificarse.
Inicialización del Client
clickhouse_connect.get_client para crear un Client síncrono, o instale el extra async y espere clickhouse_connect.get_async_client para crear un AsyncClient nativo.
Argumentos de conexión
La factoría asíncrona también acepta
connector_limit=100, connector_limit_per_host=20 y keepalive_timeout=30.0 para configurar su grupo de conexiones de aiohttp. No acepta pool_mgr. El backend síncrono de chDB acepta path y chdb_options; consulta backend chDB integrado.
Argumentos de HTTPS/TLS
Argumento settings
settings de get_client se utiliza para pasar al servidor ajustes de ClickHouse adicionales en cada solicitud del Client. Ten en cuenta que, en la mayoría de los casos, los usuarios con acceso readonly=1 no pueden modificar los ajustes enviados con una consulta, por lo que ClickHouse Connect omitirá esos ajustes en la solicitud final y registrará una advertencia. Los siguientes ajustes solo se aplican a las consultas/sesiones HTTP que usa ClickHouse Connect y no están documentados como ajustes generales de ClickHouse.
Para ver otros ajustes de ClickHouse que pueden enviarse con cada consulta, consulta la documentación de ClickHouse.
Ejemplos de creación de clientes
- Sin parámetros, un cliente de ClickHouse Connect se conectará al puerto HTTP predeterminado en
localhost, con el usuariodefaulty sin contraseña:
- Conectarse a un servidor externo de ClickHouse con HTTPS
- Conectarse con un ID de sesión y otros parámetros de conexión personalizados, así como ajustes de ClickHouse.
Backend integrado de chDB
clickhouse-connect[chdb] para usar el backend experimental de chDB en el mismo proceso. Expone los métodos síncronos de consulta, insert, streaming y Arrow del Client:
path="/data/my_chdb" o use dsn="chdb:///data/my_chdb" para contar con almacenamiento persistente. El backend permite una sola ruta de engine por proceso y no admite get_async_client ni datos externos.
Ciclo de vida del Client y buenas prácticas
Principios básicos
- Reutiliza los Clients: Crea los Clients una sola vez al iniciar la aplicación y reutilízalos durante toda su vida útil
- Evita crearlos con frecuencia: No crees un Client nuevo para cada consulta o solicitud
- Limpia correctamente: Cierra siempre los Clients al apagar la aplicación para liberar los recursos del grupo de conexiones
- Compártelos cuando sea posible: Un solo Client puede gestionar muchas consultas concurrentes a través de su grupo de conexiones (consulta las notas sobre hilos más abajo)
Patrones básicos
Aplicaciones multihilo
Limpieza adecuada
client.close() elimina el Client y cierra las conexiones HTTP agrupadas solo cuando el Client tiene su propio administrador de grupos (por ejemplo, cuando se crea con opciones personalizadas de TLS/proxy). Para el grupo compartido predeterminado, usa client.close_connections() para limpiar proactivamente los sockets; de lo contrario, las conexiones se recuperan automáticamente por expiración por inactividad y al salir del proceso.
Cuándo usar varios clientes
- Servidores diferentes: un cliente por servidor o clúster de ClickHouse
- Credenciales diferentes: clientes separados para distintos usuarios o niveles de acceso
- Bases de datos diferentes: cuando necesite trabajar con varias bases de datos
- Sesiones aisladas: cuando necesite sesiones separadas para tablas temporales o ajustes específicos de la sesión
- Aislamiento por hilo: cuando los hilos necesiten sesiones independientes (como se muestra arriba)
Argumentos comunes de los métodos
parameters y settings. A continuación se describen estos argumentos de palabra clave.
Argumento parameters
query* y command del cliente ClickHouse Connect aceptan un argumento opcional de palabra clave parameters, que se utiliza para vincular expresiones de Python a una expresión de valor de ClickHouse. Hay dos tipos de vinculación disponibles.
Vinculación del lado del servidor
{<name>:<datatype>}. Pase los valores como un diccionario de Python.
Use None de Python para valores que admiten valores nulos. Se admiten valores None anidados dentro de parámetros Array y Tuple, y dentro de literales Map cuando dict_parameter_format se establece en "map".
- Vinculación del lado del servidor con diccionario de Python, valor DateTime y valor de cadena
Vinculación en el cliente
parameters debe ser un diccionario o una secuencia. La vinculación en el cliente utiliza el formato de cadenas estilo “printf” de Python para la sustitución de parámetros.
Ten en cuenta que, a diferencia de la vinculación del lado del servidor, la vinculación en el cliente no funciona con identificadores de bases de datos, como nombres de bases de datos, tablas o columnas, ya que el formato de estilo Python no puede distinguir entre los distintos tipos de cadenas y estos deben formatearse de forma diferente (backticks o comillas dobles para identificadores de bases de datos, comillas simples para valores de datos).
- Ejemplo con un diccionario de Python, un valor DateTime y escape de cadenas
- Ejemplo con una secuencia de Python (Tuple), Float64 e IPv4Address
La vinculación de valores DateTime trata los valores sin zona horaria como hora de pared. El client formatea un Por compatibilidad con versiones anteriores, un nombre de parámetro de diccionario que termina en
datetime sin zona horaria literalmente. ClickHouse lo interpreta usando la zona horaria declarada en un placeholder del lado del servidor, como {dt:DateTime('Europe/Berlin')}, después session_timezone si está configurada y, por último, la zona horaria del servidor. Un datetime con zona horaria se convierte a la zona horaria declarada en el placeholder cuando está presente; de lo contrario, a la zona horaria del servidor indicada al momento de la conexión. Si la configuración session_timezone difiere de la zona horaria del servidor indicada, declare una zona horaria en el placeholder para mantener el instante previsto para los valores con zona horaria.Para compatibilidad temporal con la conversión heredada de la hora local del host, establezca common.set_setting("naive_datetime_binding", "legacy") antes de vincular parámetros. Para preservar un instante, adjunte el tzinfo previsto al valor datetime antes de pasarlo como parámetro. Los inserts mediante client.insert interpretan de forma predeterminada los valores datetime sin zona horaria en la zona horaria local del proceso. Establezca la configuración global naive_datetime_insert en "server" para interpretarlos como hora de pared en la zona horaria de la columna o, si la columna no tiene ninguna, en la zona horaria del servidor. Consulte Objetos datetime sin zona horaria.Para un placeholder {value:DateTime64(precision)} del lado del servidor, el tipo declarado conserva automáticamente la precisión de fracciones de segundo, incluso dentro de las pistas Array y Tuple.La vinculación %s en el cliente no tiene un tipo declarado. Envuelva un datetime en DT64Param cuando deba representarse con precisión de fracciones de segundo:_64 también solicita el formato DateTime64 cuando ese nombre exacto con sufijo no está presente en la consulta.Un parámetro datetime.time o datetime.timedelta se formatea como un literal [-]HH:MM:SS[.ffffff] para las columnas Time y Time64 de ClickHouse, en ambos estilos de vinculación y dentro de valores Array y Tuple. El client añade las comillas, así que no incluya el placeholder entre comillas en la consulta. Un timedelta puede ser negativo y superar las 24 horas. Un Timedelta de pandas conserva sus nanosegundos y se formatea con una fracción de nueve dígitos para Time64(9). La información de zona horaria de un time con zona horaria se ignora porque Time de ClickHouse no tiene zona horaria.Argumento settings
settings, para pasar ajustes de usuario del servidor ClickHouse a la sentencia SQL incluida. El argumento settings debe ser un diccionario. Cada elemento debe contener el nombre de un ajuste de ClickHouse y su valor asociado. Ten en cuenta que los valores se convertirán en cadenas al enviarse al servidor como parámetros de consulta.
Al igual que con los ajustes a nivel de cliente, ClickHouse Connect descartará cualquier ajuste que el servidor marque como readonly=1, con el correspondiente mensaje de log. Los ajustes que se aplican solo a consultas a través de la interfaz HTTP de ClickHouse siempre son válidos. Esos ajustes se describen en la API get_client.
Ejemplo de uso de ajustes de ClickHouse:
Método command del Client
Client.command para sentencias que no devuelven un conjunto de datos tabular, o para consultas que devuelven un valor primitivo o una fila. Según la respuesta, devuelve una cadena, un entero, una secuencia de cadenas o QuerySummary. Una lectura que produce un conjunto de resultados vacío devuelve una cadena vacía.
Ejemplos del comando
Sentencias DDL
Consultas sencillas que devuelven valores individuales
Comandos con parámetros
Comandos con ajustes
Método query de Client
Client.query recupera un conjunto de datos tabular en formato Native de ClickHouse y devuelve un QueryResult. El resultado completo se materializa al acceder a una propiedad del resultado. Use un método de streaming para resultados que no deban mantenerse en memoria.
Ejemplos de consultas
Consulta básica
Acceder a los resultados de la consulta
Consulta con parámetros en el cliente
Consulta con parámetros del servidor
Consulta con ajustes
El objeto QueryResult
query devuelve un objeto QueryResult con las siguientes propiedades públicas:
result_rows— Matriz de resultados orientada por filas.result_columns— Matriz de resultados orientada por columnas.result_set—result_rowsoresult_columns, según la orientación de la consulta.column_names—Tuplecon los nombres de las columnas del resultado.column_types—Tuplede objetosClickHouseType.row_count— Número de filas de resultados materializadas.query_id— ID de consulta informado o generado para la solicitud. Una cadena vacía significa que no había ninguno disponible.summary— Diccionario decodificado del header de respuestaX-ClickHouse-Summary.first_item— Primera fila como diccionario, oNonesi el resultado está vacío.first_row— Primera fila como secuencia, oNonesi el resultado está vacío.column_block_stream,row_block_streamyrows_stream— Contextos internos de stream. Use en su lugar los métodos de streaming correspondientes del Client.
StreamContext compatibles.
Consumo de resultados de consultas con NumPy, Pandas o Arrow
Métodos del cliente para consultas en streaming
Método insert del Client
Client.insert. Acepta los siguientes parámetros:
Este método devuelve
QuerySummary. Su diccionario summary contiene valores informados por el server. written_rows es una propiedad de conveniencia, mientras que written_bytes() y query_id() devuelven los valores correspondientes. Un fallo en la inserción genera una excepción.
Para métodos de inserción especializados que funcionan con Pandas DataFrames, tablas PyArrow y DataFrames respaldados por Arrow, consulte Inserciones avanzadas (Métodos de inserción especializados).
Una matriz de NumPy es una Sequence of Sequences válida y puede usarse como argumento
data para el método principal insert, por lo que no se requiere un método especializado.Ejemplos
users con el esquema (id UInt32, name String, age UInt8).
Inserción básica por filas
Inserción orientada a columnas
Inserción con tipos explícitos de columnas
Insertar en una base de datos específica
Inserciones desde archivos
API en bruto
Python DB-API 2.0
clickhouse_connect.dbapi implementa la interfaz de conexión y cursor definida por PEP 249. Declara el nivel de API 2.0, threadsafety=2 y paramstyle="pyformat". El módulo también proporciona los constructores de tipos PEP 249 Date, Time, Timestamp y Binary, y las funciones DateFromTicks, TimeFromTicks y TimestampFromTicks.
Cursor.execute y Cursor.executemany aceptan argumentos adicionales de palabra clave, settings y query_formats. settings pasa ajustes de ClickHouse. query_formats aplica formatos de lectura según el tipo de ClickHouse cuando una sentencia devuelve filas, usando la misma correspondencia que Client.query. executemany usa la ruta nativa de inserción masiva del driver para las sentencias INSERT ... VALUES compatibles con una secuencia materializada de filas. fetchone, fetchmany y fetchall consumen el resultado materializado actual.
Cursor.description deriva null_ok del tipo de cada columna de resultado. Los tipos que no admiten valores NULL informan False, y los tipos que admiten valores NULL informan True, incluidos los envoltorios Nullable, Variant y Dynamic. None significa que se desconoce la nulabilidad. Cuando una consulta que comienza con SELECT o WITH, ignorando los comentarios iniciales, no devuelve filas ni metadatos de columnas, el cursor ejecuta una consulta de metadatos LIMIT 0 para poblar description. Si esa consulta de metadatos falla, description se deja vacío.
ClickHouse no proporciona transacciones tradicionales a través de esta interfaz HTTP. Connection.commit() y Connection.rollback() no tienen efecto. Las reglas de concurrencia del ID de sesión siguen aplicándose cuando se comparte una conexión.
Clases y funciones de utilidad
clickhouse_connect.__version__.
Excepciones
clickhouse_connect.driver.exceptions. DatabaseError y OperationalError exponen un atributo numérico code con el código de error de ClickHouse y un atributo name con el nombre simbólico, como UNKNOWN_TABLE, para que las aplicaciones puedan basarse en exc.code en lugar de tener que analizar el mensaje. code se establece incluso cuando show_clickhouse_errors está deshabilitado, mientras que name requiere detalles del error (True o "scrub"). Ambos son None cuando no están disponibles, por ejemplo, en errores de transporte. Use show_clickhouse_errors="scrub" cuando los usuarios finales deban ver errores de SQL sin información del host ni de la versión del servidor. Esta configuración también controla los mensajes de StreamFailureError durante la transmisión y los mensajes de transporte genéricos. Solo afecta a str(exc). Los errores de transporte siguen adjuntos como __cause__, y los seguimientos de pila pueden contener el texto original del error del host, la URL o la biblioteca.
Utilidades de ClickHouse SQL
clickhouse_connect.driver.binding pueden usarse para construir y escapar correctamente consultas en ClickHouse SQL. Del mismo modo, las funciones del módulo clickhouse_connect.driver.parser pueden usarse para analizar nombres de tipos de datos de ClickHouse.