Introduction

myscaledb-client is an async/sync http(s) MyScale client for python 3.6+ supporting type conversion in both directions, streaming, lazy decoding on select queries, and a fully typed interface.

MyScale is a vector database built on the top of ClickHouse. We forked and modified aiochclient to support vector related queries, and also add a synchronous client. Since MyScale is compatible with ClickHouse, myscaledb-client can be also used as a ClickHouse client.

Use myscaledb-client for a simple interface into your MyScale deployment.

Requirements

myscaledb-client works on Linux, OSX, and Windows.

It requires Python >= 3.6 due to the use of types.

Installation

You can install myscaledb-client with pip or your favourite package manager. We recommend you to install it with command:

$ pip install myscaledb-client

Add the -U switch to update to the latest version if myscaledb-client is already installed.

To use with aiohttp install it with command:

$ pip install 'myscaledb-client[aiohttp]'

Or myscaledb-client[aiohttp-speedups] to install with extra speedups. By default, aiohttp is included if not specified.

To use with httpx install it with command:

$ pip install 'myscaledb-client[httpx]'

Or myscaledb-client[httpx-speedups] to install with extra speedups.

Installing with [*-speedups] adds the following:

  • cChardet for aiohttp speedup

  • aiodns for aiohttp speedup

  • ciso8601 for ultra-fast datetime parsing while decoding data from MyScale for aiohttp and httpx.

Quick Start

The quickest way to get up and running with myscaledb-client is to simply connect and check MyScale is alive. Here’s how you would do that:

# This is a demo using AsyncClient.
# AsyncClient can give you a higher degree of concurrency, it requires an understanding of asynchronous programming.

import asyncio
from myscaledb import AsyncClient
from aiohttp import ClientSession

async def main():
    async with ClientSession() as s:
        async with AsyncClient(s) as client:
            alive = await client.is_alive()
            print(f"Is MyScale alive? -> {alive}")

if __name__ == '__main__':
    asyncio.run(main())
# This is a demo using Client.
# Client works in sync mode, in line with most people's programming habits.

from myscaledb import Client

def main():
    client = Client()
    alive = client.is_alive()
    print(f"Is MyScale alive? -> {alive}")

if __name__ == '__main__':
    main()

This automatically queries a instance of MyScale on localhost:8123 with the default user. You may want to set up a different connection to test. To do that, change the following line:

client = Client()

To something like:

client = Client(url='http://localhost:8123')

Type Conversion

myscaledb-client automatically converts types from MyScale to python types and vice-versa.

MyScale Type

Python Type

UInt8

int

UInt16

int

UInt32

int

UInt64

int

Int8

int

Int16

int

Int32

int

Int64

int

Float32

float

Float64

float

String

str

FixedString

str

Enum8

str

Enum16

str

Date

datetime.date

DateTime

datetime.date

DateTime64

datetime.date

Decimal

decimal.Decimal

Decimal32

decimal.Decimal

Decimal64

decimal.Decimal

Decimal128

decimal.Decimal

IPv4

ipaddress.IPv4Address

IPv6

ipaddress.IPv6Address

UUID

uuid.UUID

Nothing

None

Tuple(T1, T2, …)

Tuple[T1, T2, …]

Array(T)

List[T]

Nullable(T)

None or T

LowCardinality(T)

T

Map(T1, T2)

Dict[T1, T2]

Connection Pool Settings

myscaledb-client uses the aiohttp.TCPConnector to determine pool size. By default, the pool limit is 100 open connections.

You can find more sample code to operate MyScale in the API Reference. Continue reading to learn more about myscaledb-client.