Skip to main content
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

Utilice 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

Por último, el argumento 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 usuario default y 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

Instala 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:
De forma predeterminada, se usa una base de datos en memoria. Pase 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

Crear un Client de ClickHouse Connect es una operación costosa, ya que implica establecer una conexión, recuperar metadatos del servidor e inicializar el ajuste. Siga estas buenas prácticas para lograr un rendimiento óptimo:

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

Reutiliza un único Client:
Evita crear Clients repetidamente:

Aplicaciones multihilo

Las instancias de Client NO son seguras para subprocesos cuando se usan ID de sesión. De forma predeterminada, los Clients tienen un ID de sesión generado automáticamente, y las consultas concurrentes dentro de la misma sesión provocarán un ProgrammingError.
Para compartir un Client entre hilos de forma segura:
Alternativa para las sesiones: Si necesita sesiones (p. ej., para tablas temporales), cree un Client independiente por hilo:

Limpieza adecuada

Cierra siempre los Clients al apagar el sistema. Ten en cuenta que 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.
O bien, usa un administrador de contexto:

Cuándo usar varios clientes

Varios clientes son adecuados para:
  • 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

Varios métodos del cliente usan uno o ambos argumentos comunes, parameters y settings. A continuación se describen estos argumentos de palabra clave.

Argumento parameters

Los métodos 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

ClickHouse admite la vinculación del lado del servidor para los valores de la consulta. El valor vinculado se envía por separado de la consulta como un parámetro HTTP. ClickHouse Connect usa este modo cuando detecta una expresión con el formato {<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
Esto equivale a:
La vinculación del lado del servidor es compatible con las consultas SELECT. No funciona con ALTER, DELETE, INSERT ni con otros tipos de sentencias.

Vinculación en el cliente

ClickHouse Connect también admite la vinculación de parámetros en el cliente, lo que permite una mayor flexibilidad al generar consultas SQL con plantillas. Para la vinculación en el cliente, el argumento 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
Esto genera la siguiente consulta en el servidor:
  • Ejemplo con una secuencia de Python (Tuple), Float64 e IPv4Address
Esto genera la siguiente consulta en el servidor:
La vinculación de valores DateTime trata los valores sin zona horaria como hora de pared. El client formatea un 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:
Por compatibilidad con versiones anteriores, un nombre de parámetro de diccionario que termina en _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

Todos los métodos principales “insert” y “select” del cliente ClickHouse Connect aceptan un argumento de palabra clave opcional, 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

Use 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

El método base 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_setresult_rows o result_columns, según la orientación de la consulta.
  • column_namesTuple con los nombres de las columnas del resultado.
  • column_typesTuple de objetos ClickHouseType.
  • 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 respuesta X-ClickHouse-Summary.
  • first_item — Primera fila como diccionario, o None si el resultado está vacío.
  • first_row — Primera fila como secuencia, o None si el resultado está vacío.
  • column_block_stream, row_block_stream y rows_stream — Contextos internos de stream. Use en su lugar los métodos de streaming correspondientes del Client.
Consulte Consultas en streaming para conocer las API de StreamContext compatibles.

Consumo de resultados de consultas con NumPy, Pandas o Arrow

ClickHouse Connect proporciona métodos de consulta específicos para trabajar con los formatos de datos NumPy, Pandas y Arrow. Para obtener información detallada sobre cómo usar estos métodos, incluidos ejemplos, streaming y gestión avanzada de tipos, consulte Consultas avanzadas (consultas de NumPy, Pandas y Arrow).

Métodos del cliente para consultas en streaming

Para transmitir grandes conjuntos de resultados, ClickHouse Connect ofrece varios métodos de streaming. Consulta Consultas avanzadas (Streaming Queries) para obtener más información y ejemplos.

Método insert del Client

Para el caso de uso habitual de insertar varios registros en ClickHouse, está el método 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

Los ejemplos a continuación suponen que existe una tabla 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

Para insertar datos directamente desde archivos en tablas de ClickHouse, consulte Inserción avanzada (Inserciones desde archivos).

API en bruto

Para casos de uso avanzados que requieran acceso directo a las interfaces HTTP de ClickHouse sin transformaciones de tipos, consulte Uso avanzado (Raw API).

Python DB-API 2.0

El módulo 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

Los siguientes módulos proporcionan funciones auxiliares públicas adicionales que usan las aplicaciones Client. La versión del paquete instalado se expone como la cadena clickhouse_connect.__version__.

Excepciones

Las excepciones personalizadas, incluida la jerarquía de excepciones de DB-API 2.0, se definen en 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

Las funciones y la clase DT64Param del módulo 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.

Casos de uso multihilo, multiproceso y asíncronos/orientados a eventos

Para obtener información sobre el uso de ClickHouse Connect en aplicaciones multihilo, multiproceso y asíncronas/orientadas a eventos, consulte Uso avanzado (casos de uso multihilo, multiproceso y asíncronos/orientados a eventos).

AsyncClient

Para obtener información sobre el uso nativo de asyncio, consulte Uso avanzado (AsyncClient).

Gestión de los IDs de sesión de ClickHouse

Para obtener información sobre cómo gestionar los IDs de sesión de ClickHouse en aplicaciones multihilo o concurrentes, consulte Uso avanzado (Gestión de los IDs de sesión de ClickHouse).

Personalización del pool de conexiones HTTP

Para obtener información sobre cómo personalizar el pool de conexiones HTTP para aplicaciones grandes con varios hilos, consulte Uso avanzado (Personalización del pool de conexiones HTTP).
Última modificación el 14 de agosto de 2026