Как заставить перегонный куб распознавать модели из нескольких файлов моделей в Flask

Итак, во Flask у меня есть models.py, который содержит все определения моей модели. Я хотел бы разделить это на несколько файлов моделей в каталоге models.

Я попробовал это, добавив некоторые файлы моделей, такие как models/user_model.py, models/booking_model.py и т. д., но, похоже, перегонный куб не обнаруживает модели в этих файлах.

В стандартном alembic.ini с Flask у меня есть:

# A generic, single database configuration.

[alembic]
# template used to generate migration files
# file_template = %%(rev)s_%%(slug)s

# set to 'true' to run the environment during
# the 'revision' command, regardless of autogenerate
# revision_environment = false


# Logging configuration
[loggers]
keys = root,sqlalchemy,alembic

[handlers]
keys = console

[formatters]
keys = generic

[logger_root]
level = WARN
handlers = console
qualname =

[logger_sqlalchemy]
level = WARN
handlers =
qualname = sqlalchemy.engine

[logger_alembic]
level = INFO
handlers =
qualname = alembic

[handler_console]
class = StreamHandler
args = (sys.stderr,)
level = NOTSET
formatter = generic

[formatter_generic]
format = %(levelname)-5.5s [%(name)s] %(message)s
datefmt = %H:%M:%S

Нужно ли мне что-то добавить сюда, чтобы алембик распознал модели?


person John Mike    schedule 28.08.2017    source источник


Ответы (2)


Вам нужно отредактировать env.py:

# add your model's MetaData object here
# for 'autogenerate' support
from your_cool_app.models import *
target_metadata = db.Model.metadata
person Aleksandr Borisov    schedule 28.08.2017
comment
Но у меня есть несколько файлов моделей, таких как app/models/user_model.py, app/models/booking_model.py. Значит ли это, что мне придется сделать что-то вроде: from app.models.user_model import User from app.models.booking_model import Booking target_metadata = db.Model.metadata - person John Mike; 28.08.2017
comment
Да, вы можете импортировать их все - person Aleksandr Borisov; 28.08.2017
comment
не могли бы вы объяснить это подробнее, пожалуйста? что такое db.Model? - person Vlad; 22.08.2019
comment
что здесь db? - person Stealth Rabbi; 30.06.2021
comment
db является экземпляром Sqlalchemy(URI). @Влад @Скрытый раввин - person tomy0608; 31.07.2021
comment
import * может последовать за коллизией имен. Лучше импортировать только один объект, например db в данном случае. - person Vodyanikov Andrew Anatolevich; 01.08.2021

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

from myapp.mymodel1 import Model1Base
from myapp.mymodel2 import Model2Base
target_metadata = [Model1Base.metadata, Model2Base.metadata]

Ссылка на документ: http://alembic.zzzcomputing.com/en/latest/autogenerate.html#autogenerating-multiple-metadata-collections

person Thaume    schedule 28.06.2018