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]