web-dev-qa-db-ja.com

非同期SQLite python

私は、aiogramライブラリを使用して非同期電報ボットを作成しています。不変の値を格納するためのデータベースとしてSQLiteを使用することにしました。データベースから非同期読み取りを実装するにはどうすればよいですか?

5
dydoser

sqlite3モジュールのラッパー すでに存在 であり、非同期コードで使用する必要があります。

または、同期呼び出しを run_in_executor でラップすることにより、非同期呼び出しに変換できます。例えば:

async def fetchall_async(conn, query):
    loop = asyncio.get_event_loop()
    return await loop.run_in_executor(
        None, lambda: conn.cursor().execute(query).fetchall())

これにより、長時間実行してもイベントループ全体がブロックされることを心配せずに、非同期コードから呼び出すことができるコルーチンが得られます。

async def some_task():
    ...
    students = await fetchall_async(conn, "select * from students")

しかし、これは十分にテストされたパッケージに任せる方がはるかに良い考えです。

1
user4815162342