既存の MySQL データベースを備えた FastAPI アプリがあり、Tortoise ORM を使用しようとしています。(簡略化された) メインの FastAPI ファイルは次のようになります。
from fastapi import FastAPI
import os
from tortoise.contrib.fastapi import register_tortoise
# Register FastAPI main app
app = FastAPI(title="my_app")
# Database
DATABASE_URL = "mysql://{}:{}@{}:{}/{}".format(
os.environ["MYSQL_USER"],
os.environ["MYSQL_PASSWORD"],
os.environ.get("MYSQL_HOST", "127.0.0.1"),
os.environ.get("MYSQL_PORT", "3306"),
os.environ.get("MYSQL_DB", "my_db"),
)
# Register Tortoise ORM with DB
register_tortoise(
app,
db_url=DATABASE_URL,
modules={"models": ["models"]},
generate_schemas=False,
add_exception_handlers=True,
)
# Test SQL query
from models import Store
print(Store.get(api_key="api_key"))
...そして、同じベース ディレクトリ レベルにある models.py ファイルは次のようになります。
from tortoise import fields
from tortoise.models import Model
class Store(Model):
api_key = fields.CharField(max_length=64, db_index=True)
name = fields.CharField(max_length=255)
def __str__(self):
return self.name
class Meta:
table = "stores"
ただし、Tortoise ORM からエラーが発生します。
File ".../site-packages/tortoise/models.py", line 265, in db
raise ConfigurationError("No DB associated to model")
tortoise.exceptions.ConfigurationError: No DB associated to model
理由はありますか?
私はドキュメント(https://tortoise-orm.readthedocs.io/en/latest/contrib/fastapi.html)に従っていますが、「モデル用に検出する必要があるモジュール」のパス/構文はあまり明確ではありません. また、モデルを に登録しようとしpydantic_model_creator
ましたが、ドキュメントではなぜそれが必要なのか明確ではありません ( https://tortoise-orm.readthedocs.io/en/latest/examples/fastapi.html#example-fastapi )。によってロードされたconfig.jsonの完全な構成ファイルを使用したくないのregister_tortoise
ですが、ドキュメントによるとオプションのようです。