当 Alembic 使用命名约定时,如果需要使用 %(constraint_name)s 通用符号来代表约束的名称,则必须显式命名该约束。否则,会出现“MissingReferencedTableError”错误。为避免这种错误发生,可以在 Alembic 迁移文件中显式指定约束的名称,如下所示:
from alembic import op
def upgrade():
op.create_table(
'my_table',
sa.Column('id', sa.Integer, primary_key=True),
sa.Column('name', sa.String, nullable=False),
sa.UniqueConstraint('name', name='uq_my_table_name') # 显式指定约束名称
)
通过在定义约束时显式指定名称,就可以确保在使用 %(constraint_name)s 通用符号时能够正确地引用约束名称。