1

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

设置如下所示:

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

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

4

2 回答 2

1

最后我设法解决了这个问题。

我使用创建表

manage.py syncdb --all
manage.py migrate --fake

loaddata由于完整性问题,无法加载转储。(例如,损坏的外键约束)

所以我不得不改变我的桌子。我删除了损坏的约束,然后我可以loaddata毫无问题地运行。

但是,当然,由于我放弃了几个约束,我的数据库仍然损坏。因此,我只需要使用psqlshell 再次更改我的表。

pgAdmin 派上用场了,因为在用户友好的界面上显示相关的转储查询,分别针对每个不同的约束。

于 2014-02-27T23:06:03.467 回答
-1

我只需编写一个 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)
于 2015-04-02T11:42:52.167 回答