私は、aiogramライブラリを使用して非同期電報ボットを作成しています。不変の値を格納するためのデータベースとしてSQLiteを使用することにしました。データベースから非同期読み取りを実装するにはどうすればよいですか?
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")
しかし、これは十分にテストされたパッケージに任せる方がはるかに良い考えです。