我正在尝试使用这里找到的脚本。
我正在连接到一个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序列