如何将 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 slavepython 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 中的不同应用程序?

Heroku 不会在 Django 中迁移模型

将 Django DB 从 SQLite 迁移到 MySQL 的最佳方法是啥?

South - 将 django 应用程序从 sqlite 迁移到 mysql

Django:如何从 ManyToMany 迁移到 ForeignKey?