I'm using Alembic with SQLAlchemy to do a schema migration and a data migration.
Since I have stored migration-specific dependencies in their own module within my project's main application myapp
(as per Michael Bayer's recommendation), I have run into ModuleNotFoundError
s when running alembic current
and alembic history
.
As suggested here, I have added the repository directory project
to my system path by adding the following to env.py
.
# Add project to path.
sys.path.append(os.getcwd())
This fixes the ModuleNotFoundError
for alembic current
, but not alembic history
.
Why do these two commands give different results?
Repository structure:
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
Migration script:
"""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...')