Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django-在多个数据库之间同步数据_Django_Postgresql_Sqlite_Django Cms_Multi Database - Fatal编程技术网

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

Django-在多个数据库之间同步数据,django,postgresql,sqlite,django-cms,multi-database,Django,Postgresql,Sqlite,Django Cms,Multi Database,在多数据库环境中,如何将所有数据从一个数据库移动到另一个数据库 设置如下所示: DATABASES = { 'default': {}, 'users': { 'NAME': 'user_data', 'ENGINE': 'django.db.backends.sqlite3', 'USER': 'user', 'PASSWORD': 'superS3cret' }, 'customers': {

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

设置如下所示:

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'
    }
}
有没有简单的解决方案/应用程序可以做到这一点?虽然单向迁移就足够了,但由于有几十个模型和对象具有复杂的foreignkey和多对多连接,因此迭代模型和对象并将它们保存到另一个模型和对象中并不能解决我的问题

loaddata
也会失败,因为对象创建使用信号创建其他对象,这会弄乱唯一键

使用sql转储甚至不是微不足道的,因为后端是不同的。我已经尝试过了,但我无法从我的sqlite3数据库中进行psql转储,这不会弄乱外键


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

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

我使用

manage.py syncdb --all
manage.py migrate --fake
由于完整性问题,使用
loaddata
加载转储无法工作。(例如,断开的外键约束)

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

然而,当然,我的数据库仍然是坏的,因为我放弃了一些约束。因此,我必须使用
psql
shell再次修改我的表


pgAdmin很方便,因为它在用户友好的界面上分别为每个不同的约束显示了相关的转储查询。

我只需要为编写一个python脚本,使用

比如说

# 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)

我也需要这个功能!使用
pg_dump
pg_restore
?@CraigRinger如果两个数据库都使用psql后端,那就太好了。sqlite3转储与psql转储不直接兼容。另一方面,我已经解决了这个问题,请看我的答案。