【发布时间】:2011-10-23 13:13:17
【问题描述】:
我使用 sqlite3 开发了一个简单的 django 应用程序。起初,我想使用 sqlite3 保持简单,但是事情开始扩大(是的,我实际上开始使用带有 sqlite3 的应用程序!真可惜……)所以我想将所有数据迁移到 postgresql 数据库。
django 或其他第三方是否提供此类功能,还是我应该为自己的愚蠢而受苦...
【问题讨论】:
标签: database django data-migration
我使用 sqlite3 开发了一个简单的 django 应用程序。起初,我想使用 sqlite3 保持简单,但是事情开始扩大(是的,我实际上开始使用带有 sqlite3 的应用程序!真可惜……)所以我想将所有数据迁移到 postgresql 数据库。
django 或其他第三方是否提供此类功能,还是我应该为自己的愚蠢而受苦...
【问题讨论】:
标签: database django data-migration
首先,执行
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)
【讨论】:
echo "delete from django_content_type;" | python managepy dbshell(注意额外的_)。它还给出了一些我必须先删除的其他表的错误消息。
我现在正在尝试做同样的事情,但我遇到了解决依赖关系的问题,基本上与ticket 16317 相同。但是关于我的事情已经够多了……
解决此问题后,我找到了django-smuggler 的链接,它允许您从管理界面创建转储和加载数据。
它看起来很有希望用于任何需要的数据传输或用作备份实用程序。
【讨论】:
如果你在加载数据时遇到错误,首先像这样转储它:
python manage.py dumpdata --exclude auth.permission --exclude contenttypes > datadump.json
如此处所述:
【讨论】:
我遇到了同样的情况,由于键约束错误,无法将数据加载到新的 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。)
【讨论】: