Я использую Alembic с SQLAlchemy для миграции схемы и миграции данных .
Поскольку я сохранил зависящие от миграции зависимости в их собственном модуле в главном приложении моего проекта myapp
(согласно рекомендация Майкла Байера ), я столкнулся с ModuleNotFoundError
s при запуске alembic current
и alembic history
.
Как предложил здесь , я добавил каталог репозитория project
в мой системный путь, добавив следующее к env.py
.
# Add project to path.
sys.path.append(os.getcwd())
Это исправляет ModuleNotFoundError
для alembic current
, , но не alembic history
.
Почему эти две команды дают разные результаты?
Структура хранилища:
project
│ alembic.ini
│ db.sqlite
│
├───alembic
│ │ env.py
│ │ README
│ │ script.py.mako
│ │
│ └───versions
│ 2b939015022a_create_athlete_table.py
│ 3649f2977ae1_migrate_athletes_to_star_athletes.py
│
└───myapp
└───migrations
star_athlete.py
Скрипт миграции:
"""migrate athletes to star_athletes
Revision ID: 3649f2977ae1
Revises: 2b939015022a
Create Date: 2019-06-12 09:46:16.173048
"""
from alembic import op
import sqlalchemy as sa
# This line causes ModuleNotFoundError
from myapp.migrations.star_athlete import StarAthlete
# revision identifiers, used by Alembic.
revision = '3649f2977ae1'
down_revision = '2b939015022a'
branch_labels = None
depends_on = None
def upgrade():
print('upgrading...')
def downgrade():
print('downgrading...')