【问题标题】:How to copy database in use to other database in django?如何将正在使用的数据库复制到django中的其他数据库?
【发布时间】:2011-10-23 13:13:17
【问题描述】:

我使用 sqlite3 开发了一个简单的 django 应用程序。起初,我想使用 sqlite3 保持简单,但是事情开始扩大(是的,我实际上开始使用带有 sqlite3 的应用程序!真可惜……)所以我想将所有数据迁移到 postgresql 数据库。

django 或其他第三方是否提供此类功能,还是我应该为自己的愚蠢而受苦...

【问题讨论】:

标签: database django data-migration


【解决方案1】:

首先,执行

manage.py dumpdata > out.json

然后更改您的数据库配置,迁移(或同步数据库),最后

echo "delete from auth_permission; delete from django_content_type;" | python manage.py dbshell

(如果你的 Django 版本早于 1.11,则需要使用

echo "delete from django_content_type;" | manage.py dbshell

)

然后加载 JSON 文件:

manage.py loaddata out.json

(截至 2013 年,django_contenttype 已替换为 django_content_type

【讨论】:

  • 我收到类似这样的错误:完整性错误:重复键值违反唯一约束“django_content_type_app_label_model_key”详细信息:KEY (app_label, model)=(admin,logentry) 已存在
  • 你换过数据库吗?当您转储数据时,您可以简单地删除您拥有的表,更新架构,运行 syncdb(将重新创建表)并再次加载数据(请记住,如果您从架构中删除了一些列,则需要从 json 文件中删除它也)。当您运行“manage.py sqlreset appname”时,您可以看到重置应用程序所需的表和查询。而且, --indent=4 将有助于使用 dumpdata 命令;)
  • 顺便说一句 - stackoverflow.com/questions/5739880/… 可能会有所帮助..
  • 我不得不做echo "delete from django_content_type;" | python managepy dbshell(注意额外的_)。它还给出了一些我必须先删除的其他表的错误消息。
  • 两年后,也许 django 表发生了变化。 @thumbtackthief 您能否确认这是一个更改,在这种情况下更新我的答案或给出一个新答案?
【解决方案2】:

我现在正在尝试做同样的事情,但我遇到了解决依赖关系的问题,基本上与ticket 16317 相同。但是关于我的事情已经够多了……

解决此问题后,我找到了django-smuggler 的链接,它允许您从管理界面创建转储和加载数据。

它看起来很有希望用于任何需要的数据传输或用作备份实用程序。

【讨论】:

    【解决方案3】:

    如果你在加载数据时遇到错误,首先像这样转储它:

    python manage.py dumpdata --exclude auth.permission --exclude contenttypes > datadump.json
    

    如此处所述:

    http://www.denzow.me/entry/2017/09/06/223517

    【讨论】:

      【解决方案4】:

      我遇到了同样的情况,由于键约束错误,无法将数据加载到新的 postgresql 数据库中。对我有用的是将我的“默认”sqlite 数据库重命名为“sqlite”,将我的 postgresql 数据库连接添加为“默认”,像这样进行数据导出:

      python manage.py dumpdata --database sqlite --natural-foreign --natural-primary > sqlite-dump.json

      然后像这样将数据加载到新数据库中:

      python manage.py loaddata sqlite-dump.json

      (这是 Django 2.2。)

      【讨论】:

        猜你喜欢
        • 2012-09-15
        • 2014-04-11
        • 2013-01-30
        • 1970-01-01
        • 1970-01-01
        • 2011-03-21
        • 2012-01-17
        • 2016-01-20
        • 1970-01-01
        相关资源
        最近更新 更多