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 转储甚至也不是微不足道的,因为后端不同。我已经尝试过这个,我无法设法从我的 sqlite3 数据库中进行 psql 转储,这不会弄乱外键。
因此,我需要一个解决方案,它将数据从数据库加载到另一个数据库,但不发送信号,并且也可以使用外键。但我找不到任何可以做到这一点的东西。
解决方案
最后我设法解决了这个问题。
我使用创建表
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