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 に答える