Django - 在多个数据库之间同步数据

时间:2014-02-27 15:13:31

标签: django postgresql sqlite django-cms multi-database

在多数据库环境中,如何将所有数据从数据库移动到另一个数据库?

设置如下所示:

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转储,这不会弄乱外键。

所以我需要一个解决方案,它将数据从数据库加载到另一个数据库,但不发送信号,并且也使用外键。但我找不到任何可以做到这一点。

2 个答案:

答案 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)