代码之家  ›  专栏  ›  技术社区  ›  George Mauer

SQLAlchemy迁移生成具有不同名称的外键。怎么去掉这些?

  •  1
  • George Mauer  · 技术社区  · 7 年前

    在我的SQLAlchemy数据模型中,我从 project->customer . 我正在进行迁移,最初这个FK是通过

    sa.ForeignKeyConstraint(['customer_id'], ['customers.id'], )
    

    (这是在创建 project 表,以便自动生成 down 就是简单地 drop_table ).

    现在,我将删除此引用,从而删除该约束。为其自动生成的迁移是

    op.drop_constraint('FK__projects__custom__412EB0B6', 'projects', type_='foreignkey')
    

    问题是约束 不总是这样命名的 FK__projects__custom__2E1BDC42 ,在另一件事中…我如何正确地删除约束,以及是什么导致名称上的差异?

    显然地 I had the option to name the constraint

    1 回复  |  直到 7 年前
        1
  •  1
  •   George Mauer    7 年前

    我最后把这个添加到了我的迁移中

    op.execute("""
        DECLARE @fk_project_customer varchar(50);
        SELECT @fk_project_customer = (SELECT name FROM sys.foreign_keys WHERE name LIKE 'FK__projects__custom__%');
        EXEC('ALTER TABLE projects DROP CONSTRAINT "' + @fk_project_customer + '"');
    """)
    

    因此,它基本上会从中找到遵循此模式的约束名称 sys.foreign_keys 正如@Ilja推荐的那样 EXEC