【FastAPI】greenlet_spawn has not been called; を解決する
やろうとしたこと
alembicを使ってdocker内でマイグレーションファイルを作ろうとした
docker-compose exec demo-app poetry run alembic revision --autogenerate -m "create_table"
エラーの発生
sqlalchemy.exc.MissingGreenlet: greenlet_spawn has not been called; can't call
await_only() here. Was IO attempted in an unexpected place? (Background on this error at: https://sqlalche.me/e/20/xd2s)
対処法
Alembicを使用してデータベースマイグレーション用の初期設定を作成するものです。
また、-t asyncオプションを使用して、非同期処理をサポートする初期設定を作成します。
docker-compose exec demo-app poetry run alembic init -t async migrations
Dockerを使っていない人は下記で解決できるかも
alembic init -t async migrations
alembic スクリプトで非同期ドライバーを使用したい場合は、これと互換性があるように env.py スクリプトを作り直す必要があります。
env.pyの設定はURLを参考にしてください。
https://alembic.sqlalchemy.org/en/latest/cookbook.html#using-asyncio-with-alembic