Нет базы данных, связанной с проблемой модели FastApi и Tortoise ORM

#python #backend #fastapi #tortoise-orm

Вопрос:

У меня есть проект, созданный FastApi с миграциями черепахи ОРМ и айрича. Инициализация Aerich была успешно завершена, все миграции также были выполнены. Здесь вы можете увидеть мой main.py:

 app = FastAPI()

Tortoise.init_models(settings.TORTOISE_MODELS_LIST, "models")
register_tortoise(
    app, config=settings.TORTOISE_ORM,
    generate_schemas=True,
    add_exception_handlers=True,
)

app.include_router(purchases.router.router)


if __name__ == "__main__":
    uvicorn.run("main:app", debug=True, reload=True, lifespan='on')
 

Вот настройки.py, где размещен список TORTOISE_MODELS_LIST:

 TORTOISE_MODELS_LIST = ["purchases.models", "aerich.models"]

TORTOISE_ORM = {
    "connections": {"default": DATABASE_URL},
    "apps": {
        "models": {
            "models": TORTOISE_MODELS_LIST,
            "default_connection": "default",
        },
    },
}
 

У меня нет проблем при запуске, но когда я запускаю этот метод:

 @router.get("/get/latest", tags=["purchases"], response_model=List[Purchase_Pydantic],
            description="Shows last 25 purchases")
async def get_latest_purchases():
    purchases = await Purchase.all()[:25]
    return Purchase_Pydantic.from_tortoise_orm(purchases)
 

У меня такая странная проблема:

 tortoise.exceptions.ConfigurationError: No DB associated to model
 

Как решить эту проблему? Айрич, похоже, работает классно…

Комментарии:

1. Привет @ftelnov. Могу я задать вам несколько вопросов о том, как вы реализовали aerich с помощью TortoiseOrm? Я изо всех сил пытаюсь найти какую-либо документацию о том, как будут работать миграции. Он автоматически создается на основе ваших моделей? и работает ли это с PostgreSQL? если у вас есть какая-либо другая информация, это было бы здорово

2. @bruzza42 у Айрича хорошая документация. Вам просто нужно вызвать init-db для создания схемы и первой миграции. С этого времени всякий раз, когда вы вызываете migrate, он создает новый файл миграции .sql. Чтобы применить изменения, вам просто нужно позвонить в службу обновления.

Ответ №1:

Для тех, кто видит такую ошибку: в списке моделей размещайте не относительное имя модуля, а абсолютное. Таким образом, это будет «приложение.элементы.модели», а не «элементы.модели». Работает на меня.