Tech Blog

SQLAlchemyで非同期処理を扱う際の注意点

SQLAlchemyを使った非同期処理には、様々な注意点があります。この記事ではどのような点に気を付けて実装をするべきかを紹介します。

ドライバー

  • 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.

記事へのご感想、ご意見は問い合わせフォームからお送りください。

記事一覧に戻る

My Awesome Website!