SQLAlchemyで非同期処理をしてみよう
SQLAlchemy で非同期処理
SQLAlchemy バージョン1.4 からPython asyncioをサポートされました。
SQLAlchemy は、AsyncConnection および AsyncSession オブジェクトを使用して、Core の Connection および ORM の Session に対する全く新しい asyncio フロントエンド・インターフェイスを提供しています。これらを使用して、Python asyncio 互換のデータベース・ドライバをサポートするようになりました。
SQLAlchemy 1.4.3 の asyncio 拡張機能は、まだベータレベルとされています。API の詳細は変更される可能性がありますが、現時点では後方互換性のない重要な変更が行われることはないと見込まれています。
最初にサポートされるデータベース API は、PostgreSQL 用の asyncpg asyncio ドライバです。
SQLAlchemy の内部機能は、データベースドライバから asyncio の await キーワードを非同期メソッドを特徴とするエンドユーザ API に伝搬させるために、SQLAlchemy の内部での実行の流れを適応させるために greenlet ライブラリを利用することで完全に統合されています。このアプローチにより、asyncpg ドライバは SQLAlchemy のテストスイートで完全に動作し、ほとんどの psycopg2 の機能と互換性があります。このアプローチは greenlet プロジェクトの開発者によって吟味され、改善されました。これは SQLAlchemy にとってありがたいことです。