【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