Возвращаясь к SQLAlchemy из мира Django, я хотел бы разделить проект на несколько приложений, в которых модели и представления сгруппированы вместе в соответствии с их назначением.
Например, я пишу приложение для планирования, и мне бы хотелось, чтобы Users
и Plans
жили в отдельных приложениях внутри моего проекта. Я хочу убедиться, что если мне придется разделить этот проект на более мелкие, у меня будет наименьший объем работы, который можно выполнить.
Я также хотел бы иметь возможность создавать и запускать миграции с помощью одной команды соответственно, чтобы мне не приходилось реконфигурировать сборки CI каждый раз, когда я добавляю модель или «приложение».
Пока что я могу придумать в этом отношении
структура проекта:
my_planner
+- users
| +- migrations
| | +- versions
| | | +- 0000_initial.py
| | +- __init__.py
| | +- env.py
| | +- script.py.mako
| +- __init__.py
| +- models.py
+- plans (same structure as users)
alembi c .ini:
[alembic]
script_location = alembic/migrations # this doesn't seem to matter
version_locations = users/migrations/versions plans/migrations/options
[users]
script_location = users/migrations
[plans]
script_location = plans/migrations
А затем мне пришлось поместить файлы env.py
в мои папки migrations
и импортировать нужные модели быть включенным в автоматические c миграции.
Однако, когда я генерирую свои автоматические c миграции, я должен указать точные «приложения», для которых я их генерирую, и указать ветвь.
PYTHONPATH=. alembic --name users revision -m 'initial' --rev-id='0000' --branch-label users --autogenerate
И когда я применяю миграции, я должен применять их отдельно для каждой из ветвей.
Есть ли способ сделать эти вещи в одной команде, соответственно, без написания собственных сценариев? Или есть другой подход к управлению миграцией?