Я пытаюсь использовать перегонный куб для согласования схемы базы данных MySQL и представления ORM Python.
Проблема, которую я вижу, заключается в том, что при миграции всегда есть избыточные команды удаления и создания для внешних ключей. Кажется, что автогенерация считает что-то другим, но на самом деле это одно и то же.
При повторном вызове команд:
Код: Выделить всё
alembic revision --autogenerate
alembic upgrade head
регистрация на стандартный вывод показывает что-то вроде (например):
Код: Выделить всё
INFO [alembic.autogenerate.compare] Detected removed foreign key (t1_id)(id) on table table_two
INFO [alembic.autogenerate.compare] Detected added foreign key (t1_id)(id) on table test_fktdb.table_two
Код: Выделить всё
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.drop_constraint('fk_table1', 'table_two', type_='foreignkey')
op.create_foreign_key('fk_table1', 'table_two', 'table_one', ['t1_id'], ['id'], source_schema='test_fktdb', referent_schema='test_fktdb')
# ### end Alembic commands ###
def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.drop_constraint('fk_table1', 'table_two', schema='test_fktdb', type_='foreignkey')
op.create_foreign_key('fk_table1', 'table_two', 'table_one', ['t1_id'], ['id'])
# ### end Alembic commands ###
Код: Выделить всё
[...import and bobs...]
class TableOne(Base):
"""Class representing a table with an id."""
__tablename__ = "table_one"
id = Column(UNSIGNED_INTEGER, nullable=False, autoincrement=True, primary_key=True)
__table_args__ = (
dict(mysql_engine='InnoDB'),
)
class TableTwo(Base):
"""A table representing records with a foreign key link to table one."""
__tablename__ = "table_two"
id = Column(UNSIGNED_INTEGER, nullable=False, autoincrement=True, primary_key=True)
t1_id = Column(UNSIGNED_INTEGER, nullable=False)
__table_args__ = (
ForeignKeyConstraint(["t1_id"], ["test_fktdb.table_one.id"], name="fk_table1"),
dict(mysql_engine='InnoDB'),
)
Я изучил эту проблему и обнаружил несколько старых проблем в перегонном кубе GitHub (см. [1],[2],[3]). Проблемы, у которых есть решения, похоже, связаны с базами данных postgres и общедоступностью схемы. Я не уверен, что это применимо к данному случаю, поскольку я использую MySQL; Соответствующая документация для общедоступных схем Postgres находится здесь: https://docs.sqlalchemy.org/en/latest/d ... earch-path
Теперь я добавил свою собственную проблему в репозиторий перегонного куба GitHub: https://github.com/sqlalchemy/alembic/issues/519
Закрытые проблемы в системе отслеживания проблем перегонного куба, которые показывают схожие симптомы, но решения которых не применяются (насколько я вижу):
[1] https://github.com/sqlalchemy/alembic/issues/444
[2] https://github.com/sqlalchemy/alembic/issues/398
[3] https://github.com/sqlalchemy/alembic/issues/293
Подробнее здесь: https://stackoverflow.com/questions/535 ... migrations
Мобильная версия