Я использую process_revision_directives , чтобы применить некоторую постобработку операций, сгенерированных для эталонной схемы. Единственное, на чем я застрял - это удаление схемы postgres из инструкций, поэтому ее можно изменить во время выполнения, используя ответ из другого вопроса .
Приведенный ниже код корректно удаляет схему из операций, за исключением ForeignKeyConstraints
в CreateTableOp
.
def process_foreign_key(col: sa.ForeignKeyConstraint):
col.referred_table.schema = None # Doesn't work
def process_revision_directives(context, revision, directives):
# Remove the schema from the generated operations
for op in chain(directives[0].upgrade_ops.ops, directives[0].downgrade_ops.ops):
if isinstance(op, ops.CreateTableOp):
op.columns = [
process_foreign_key(col) if isinstance(col, sa.ForeignKeyConstraint) else col
for col in op.columns
]
op.schema = None
В настоящее время генерируется вывод, подобный
op.create_table('user',
sa.Column('id', sa.Integer, nullable=False),
sa.ForeignKeyConstraint(['id'], ['reference_schema.group.id'], name='group_group_id', onupdate='CASCADE', ondelete='CASCADE'),
)
Есть идеи, как мне изменить эти объекты ограничения, чтобы в целевой таблице не было reference_schema.
?