mymarilyn / clickhouse-driver

ClickHouse Python Driver with native interface support
https://clickhouse-driver.readthedocs.io
Other
1.21k stars 214 forks source link
clickhouse database driver native yandex

ClickHouse Python Driver

.. image:: https://img.shields.io/pypi/v/clickhouse-driver.svg :target: https://pypi.org/project/clickhouse-driver

.. image:: https://coveralls.io/repos/github/mymarilyn/clickhouse-driver/badge.svg?branch=master :target: https://coveralls.io/github/mymarilyn/clickhouse-driver?branch=master

.. image:: https://img.shields.io/pypi/l/clickhouse-driver.svg :target: https://pypi.org/project/clickhouse-driver

.. image:: https://img.shields.io/pypi/pyversions/clickhouse-driver.svg :target: https://pypi.org/project/clickhouse-driver

.. image:: https://img.shields.io/pypi/dm/clickhouse-driver.svg :target: https://pypi.org/project/clickhouse-driver

.. image:: https://github.com/mymarilyn/clickhouse-driver/actions/workflows/actions.yml/badge.svg :target: https://github.com/mymarilyn/clickhouse-driver/actions/workflows/actions.yml

ClickHouse Python Driver with native (TCP) interface support.

Asynchronous wrapper is available here: https://github.com/mymarilyn/aioch

Features

Documentation

Documentation is available at https://clickhouse-driver.readthedocs.io.

Usage

There are two ways to communicate with server:

Pure Client example:

.. code-block:: python

    >>> from clickhouse_driver import Client
    >>>
    >>> client = Client('localhost')
    >>>
    >>> client.execute('SHOW TABLES')
    [('test',)]
    >>> client.execute('DROP TABLE IF EXISTS test')
    []
    >>> client.execute('CREATE TABLE test (x Int32) ENGINE = Memory')
    []
    >>> client.execute(
    ...     'INSERT INTO test (x) VALUES',
    ...     [{'x': 100}]
    ... )
    1
    >>> client.execute('INSERT INTO test (x) VALUES', [[200]])
    1
    >>> client.execute(
    ...     'INSERT INTO test (x) '
    ...     'SELECT * FROM system.numbers LIMIT %(limit)s',
    ...     {'limit': 3}
    ... )
    []
    >>> client.execute('SELECT sum(x) FROM test')
    [(303,)]

DB API example:

.. code-block:: python

    >>> from clickhouse_driver import connect
    >>>
    >>> conn = connect('clickhouse://localhost')
    >>> cursor = conn.cursor()
    >>>
    >>> cursor.execute('SHOW TABLES')
    >>> cursor.fetchall()
    [('test',)]
    >>> cursor.execute('DROP TABLE IF EXISTS test')
    >>> cursor.fetchall()
    []
    >>> cursor.execute('CREATE TABLE test (x Int32) ENGINE = Memory')
    >>> cursor.fetchall()
    []
    >>> cursor.executemany(
    ...     'INSERT INTO test (x) VALUES',
    ...     [{'x': 100}]
    ... )
    >>> cursor.rowcount
    1
    >>> cursor.executemany('INSERT INTO test (x) VALUES', [[200]])
    >>> cursor.rowcount
    1
    >>> cursor.execute(
    ...     'INSERT INTO test (x) '
    ...     'SELECT * FROM system.numbers LIMIT %(limit)s',
    ...     {'limit': 3}
    ... )
    >>> cursor.rowcount
    0
    >>> cursor.execute('SELECT sum(x) FROM test')
    >>> cursor.fetchall()
    [(303,)]

License

ClickHouse Python Driver is distributed under the MIT license <http://www.opensource.org/licenses/mit-license.php>_.