Skip to content

Latest commit

 

History

History
57 lines (40 loc) · 1.46 KB

async_databases.md

File metadata and controls

57 lines (40 loc) · 1.46 KB

Async Databases

Databases in async mode have basically the same API. In most cases you just need to add await.

Insert from the AioDatabase

To write your instances to ClickHouse, you need a AioDatabase instance:

from clickhouse_orm.aio.database import AioDatabase

db = AioDatabase('my_test_db')

async def main():
    await db.init()
    ...

Unlike the previous Database instance, you have to use an asynchronous method to initialize the db.

Using the AioDatabase instance you can create a table for your model, and insert instances to it:

from clickhouse_orm.aio.database import AioDatabase

db = AioDatabase('my_test_db')

async def main():
    await db.init()
    await db.create_table(Person)
    await db.insert([dan, suzy])

The insert method can take any iterable of model instances, but they all must belong to the same model class.

Reading from the AioDatabase

Loading model instances from the database is easy, use the async for keyword:

async for person in db.select("SELECT * FROM my_test_db.person", model_class=Person):
    print(person.first_name, person.last_name)

Note: AioDatabase does not support QuerySet value by index

async def main():
    await db.init()

    # incorrect example
    person = await Person.objects_in(db).filter[5]
    
    # correct
    person = [_ async for _ in Person.objects_in(db).filter[5:5]][0]