Django - 複数のデータベース間のデータの同期
-
23-12-2019 - |
質問
マルチデータベース環境、データベースから別のデータを別のデータに移動する方法は?
設定は次のようになります。
DATABASES = {
'default': {},
'users': {
'NAME': 'user_data',
'ENGINE': 'django.db.backends.sqlite3',
'USER': 'user',
'PASSWORD': 'superS3cret'
},
'customers': {
'NAME': 'customer_data',
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'USER': 'cust',
'PASSWORD': 'veryPriv@ate'
}
}
.
これを行うための簡単な解決策/アプリはありますか?一方向の移行では十分ですが、複雑な外部キーと多対数の接続を持つ数十のモデルやオブジェクトがあるため、モデルやオブジェクトを繰り返し、それらを別の多くに保存しても問題は解決しません。
オブジェクトの作成は信号を使用してバージョンオブジェクトを作成し、これはユニークなキーをめちゃくちゃにしているため、 loaddata
も失敗します。
バックエンドが異なるため、SQL DUMPSの使用は簡単ではありません。これを試してみましたが、私はPSQLのダンプをMy SQLite3データベースからダンプすることができませんでした。これは、外部キーをめちゃくちゃにしません。
SO Iは、データベースから別のデータをロードするが、信号を送信しており、外部キーでも機能しないソリューションが必要です。しかし、私はこれをするものを見つけることができませんでした。
解決
最後に私はこれを解決することができました。
を使用してテーブルを作成しました
manage.py syncdb --all
manage.py migrate --fake
.
loaddata
を使用したダンプのロードは、完全性の問題により機能しませんでした。(例えば、外部キー制約など)
だから私は私のテーブルを変更しなければなりませんでした。私は壊れた制約を削除した後、問題なくloaddata
を実行することができます。
しかしもちろん、私はカップルの制約を落としたので、私のデータベースはまだ壊れていました。したがって、psql
シェルを使用して、私のテーブルをもう一度変更する必要がありました。
PGADMINは便利になってきました。
他のヒント
インスタンスをあるデータベースから別のデータベースへの移行 Django-Extensions RunScript
例えば
です# Move Foo table data from one to another
for each_foo in Foo.objects.using("users").all():
# _create foo instance in customer_data
foo_obj, status = Foo.objects.using("customers").get_or_create(
foo_name=each_foo.foo_name,
foo_code=each_foo.foo_code)
. 所属していません StackOverflow