在多数据库环境中,如何将所有数据从数据库移动到另一个数据库?
设置如下所示:
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转储,这不会弄乱外键。
所以我需要一个解决方案,它将数据从数据库加载到另一个数据库,但不发送信号,并且也使用外键。但我找不到任何可以做到这一点。
答案 0 :(得分:1)
最后我设法解决了这个问题。
我使用
创建了表格manage.py syncdb --all
manage.py migrate --fake
由于完整性问题,使用loaddata
加载转储无效。 (例如,破坏的外键约束)
所以我不得不改变我的桌子。我删除了破坏的约束,然后我可以毫无问题地运行loaddata
。
然而,当然我的数据库仍然被打破,因为我放弃了一些约束。因此,我只需要使用psql
shell再次更改我的表。
pgAdmin派上用场,因为在用户友好的界面上显示相关的转储查询,分别针对每个不同的约束。
答案 1 :(得分:-1)
我只为migrate the instance from one Database to another编写一个python脚本,使用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)