我有一个带有现有 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
,根据文档,它似乎是可选的。