ドライバー
-
MySQLの場合
ドライバーにaiomysql
またはasyncmy
を使用する -
PostgreSQLの場合
ドライバーにasyncpg
を使用する
設定(同期処理と異なる点)
from sqlalchemy.ext.asyncio import create_async_engine, async_sessionmaker
engine = create_async_engine("データベースのURL")
Session = async_sessionmaker(engine, expire_on_commit=False)
エンジンを変更した場合は、それに伴ってデータベースのURLに変更を反映させる必要があることに注意。
expire_on_commit=False
として、各コミットごとにコミット後にreflesh()を使う
参考
(もう少しこの辺調べる)
クエリ
- lazy='raise'としてlazy loadが発生した場合に例外を投げるようにするのが安全
raise loading - available via lazy='raise', lazy='raise_on_sql', or the raiseload() option, this form of loading is triggered at the same time a lazy load would normally occur, except it raises an ORM exception in order to guard against the application making unwanted lazy loads. An introduction to raise loading is at Preventing unwanted lazy loads using raiseload.