Изменил схему БД; создал новые таблицы, добавил ограничения на старые (Foreign Key, например).
Автоматически генерирую новую ревизию командой
alembic revision --autogenerate .
Получаю такую миграцию:
def upgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
op.create_table('Users',
sa.Column('id', sa.BIGINT(), nullable=False),
sa.Column('username', sa.String(length=30), nullable=False),
sa.Column('fisrt_name', sa.String(length=64), nullable=False),
sa.Column('last_name', sa.String(length=64), nullable=False),
sa.Column('signed', sa.TIMESTAMP(timezone=True), nullable=False),
sa.PrimaryKeyConstraint('id')
)
op.create_table('Aliases', #11 строка
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('name', sa.String(), nullable=False),
sa.Column('category_id', sa.Integer(), nullable=False),
sa.ForeignKeyConstraint(['category_id'], ['Category.id'], ),
sa.PrimaryKeyConstraint('id')
)
op.drop_table('User')
op.add_column('Category', sa.Column('id', sa.Integer(), nullable=False)) #18 строка
op.add_column('Category', sa.Column('user_id', sa.BIGINT(), nullable=False))
op.create_foreign_key(None, 'Category', 'Users', ['user_id'], ['id'])
op.drop_column('Category', 'is_base_expanse')
op.drop_column('Category', 'codename')
op.drop_column('Category', 'aliases')
op.add_column('Expense', sa.Column('category_id', sa.Integer(), nullable=False))
op.drop_constraint('Expense_category_codename_fkey', 'Expense', type_='foreignkey')
op.create_foreign_key(None, 'Expense', 'Category', ['category_id'], ['id'])
op.drop_column('Expense', 'category_codename')
# ### end Alembic commands ###
В 11 строке создается таблица
Aliases, в которой должен быть столбец
category_id с внешним ключом, ссылающимся на столбец
id таблицы
Category. Но проблема в том, что в этой миграции создание столбца
Category.id по порядку идет после создания таблицы
Alilases (в 18 строке), поэтому я получаю ошибку:
sqlalchemy.exc.ProgrammingError: (sqlalchemy.dialects.postgresql.asyncpg.ProgrammingError) <class 'asyncpg.exceptions.UndefinedColumnError'>: column "id" referenced in foreign key constraint does not exist
Я могу поменять порядок вручную в миграции, но скорее всего я что-то не понимаю или неправильно делаю, потому что, по идее, он должен автоматически создавать миграцию с командами в нужном порядке (я так думаю, конечно могу ошибаться).
Спасибо за потраченное время