如何将 Django 模型从 mysql 迁移到 sqlite(或在任何两个数据库系统之间)?
Posted
技术标签:
【中文标题】如何将 Django 模型从 mysql 迁移到 sqlite(或在任何两个数据库系统之间)?【英文标题】:How to migrate Django models from mysql to sqlite (or between any two database systems)? 【发布时间】:2011-05-31 11:22:25 【问题描述】:我在生产环境中有一个使用 mysql 的 Django 部署。
我想用 SQLite 做进一步的开发,所以我想把我现有的数据导入一个 SQLite 数据库。我
有一个 shell 脚本 here 可以将一般的 MySQL 转储转换为 SQLite,但它对我不起作用(显然一般问题并不容易)。
我认为使用 Django 模型执行此操作一定要容易得多。你会怎么做?有没有人有任何脚本来做到这一点?
【问题讨论】:
【参考方案1】:您是否尝试过使用manage.py dumpdata > datadump
,然后在正确设置新数据库后,使用python manage.py loaddata datadump
?
【讨论】:
【参考方案2】:不妨试试南方:
http://south.aeracode.org/docs/index.html
【讨论】:
south 最适合架构迁移,而不适合导入/导出数据 @mosta:south的schema迁移特性很好,但是south也有很好的数据迁移能力。【参考方案3】:使用
manage.py dumpdata > your_file.json
从生产系统中导出您的数据 (docs)。
然后在开发系统上移动文件并运行
manage.py loaddata your_file.json
您也可以将文件放在名为“initial_data.json”的 your_app/fixtures 文件夹中,当您运行“manage.py syncdb”(docs)时,它将自动加载。
【讨论】:
在我的场景中,我在 python virtualenv 中使用 Mezzanine 和 django。为了让这些命令对我有用,我必须在开始时添加“python”。例如python manage.py dumpdata > db_mezzanine_bak.json
【参考方案4】:
如果您在已安装的应用中有内容类型
INSTALLED_APPS = (
'django.contrib.contenttypes',
)
使用脚本将您的条目复制到新基地:
from django.contrib.contenttypes.models import ContentType
def run():
def do(Table):
if Table is not None:
table_objects = Table.objects.all()
for i in table_objects:
i.save(using='slave')
ContentType.objects.using('slave').all().delete()
for i in ContentType.objects.all():
do(i.model_class())
查看完整手册here
【讨论】:
我想你忘了提点什么。这是对我有用的东西 1)确保正确的设置(即,如果没有内容类型添加它)。然后python manage.py syncdb --database slave
或python manage.py migrate --database slave
。 2)在某处写函数run()
。 3)从python manage.py shell
调用它或创建一个django自定义命令(docs.djangoproject.com/en/1.9/howto/custom-management-commands/…并使用它。
那是相当过时的答案。最新的 Django 有更好的 dumpdata
版本,所以你不需要为 DB 之间的切换定制解决方案。
恕我直言,根据我对当前项目的经验,我不这么认为。我在 Django 1.8 中尝试了 dumpdata 和 loaddata 以将 Postgresql 转换为 Sqlite,但最终出错。你的解决方案就像一个魅力。无论如何,用户应该先尝试 dumpdata 和 loaddata,然后他们也可以尝试(就像我一样)。
dumpdata/loaddata 和这个小例程都不适用于我。该问题是由链接到尚不存在的表条目的外键引起的。显然,表格的顺序很重要。在这个例程中添加一个延迟带有外键的表的函数将是一个好主意。我不知道如何测试带有外键的字段的表。以上是关于如何将 Django 模型从 mysql 迁移到 sqlite(或在任何两个数据库系统之间)?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Django 中使用 South 将数据从一个模型迁移到另一个模型?
如何将自定义用户模型迁移到 Django 中的不同应用程序?
将 Django DB 从 SQLite 迁移到 MySQL 的最佳方法是啥?