SQLAlchemy使用自动加载创建表的循环依赖性错误

时间:2013-04-08 16:45:54

标签: sqlalchemy

我正在尝试使用找到的here脚本。

我正在连接到MS SQL数据库并尝试将其复制到MySQL数据库中。当脚本到达这一行时:

table.metadata.create_all(dengine)

我收到错误:

  

sqlalchemy.exc.CircularDependencyError

我重新搜索了此错误,发现在创建表时使用autoload=True时会出现此问题。解决方案虽然没有帮助我。对此的解决方案是不使用autoload=True并在定义外键时使用use_alter=True标志,但我没有手动定义表,因此我无法设置该标志。

如何纠正这个问题或者更好地完成我想要做的事情的任何帮助将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:0)

您可以遍历所有约束并在其上设置use_alter:

from sqlalchemy.schema import ForeignKeyConstraint

for table in metadata.tables.values():
   for constraint in table.constraints:
     if isinstance(constraint, ForeignKeyConstraint):
         constraint.use_alter = True

或类似地,迭代它们并将它们指定为AddConstraint操作,绑定到整个元数据创建后:

from sqlalchemy import event
from sqlalchemy.schema import AddConstraint

for table in metadata.tables.values():
    for constraint in table.constraints:
        event.listen(
           metadata,
          "after_create",
         AddConstraint(constraint)
        )

请参阅Controlling DDL Sequences