0

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

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

table.metadata.create_all(dengine)

我得到以下错误:

sqlalchemy.exc.CircularDependencyError

我重新搜索了这个错误,发现它是autoload=True在创建表时使用的。解决方案虽然对我没有帮助。解决方案是在定义外键时不使用autoload=True和使用use_alter=True标志,但我没有手动定义表,所以我不能设置那个标志。

任何有关如何纠正此问题或以更好的方式完成我正在尝试做的事情的帮助将不胜感激。谢谢你。

4

1 回答 1

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)
        )

请参阅控制 DDL 序列

于 2013-04-10T22:51:41.343 回答