SQLAlchemy使用自动加载创建表时出现循环依赖错误



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

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

table.metadata.create_all(dengine)
我得到的错误是:

sqlalchemy.exc.CircularDependencyError

我研究了这个错误,发现在创建表时使用autoload=True时会发生这个错误。这个解决方案对我没有帮助。这个问题的解决方案是在定义外键时不使用autoload=True并使用use_alter=True标志,但是我没有手动定义表,所以我不能设置该标志。

任何关于如何纠正这个问题的帮助,或者在一个更好的方式来完成我正在努力做的事情,将不胜感激。谢谢你。

您可以遍历所有约束并在它们上设置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)
        )

参见控制DDL序列

最新更新