如何优雅的将数据从sqlite3迁移到mysql

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何优雅的将数据从sqlite3迁移到mysql相关的知识,希望对你有一定的参考价值。

参考技术A 如果你要将sqlite中导出到mysql的专门的工具,个人推荐使用 ESF Database Convert 工具软件。

ESF Database Convert 是一款允许你快速简单的在各种不同的数据库格式之间转换的工具。可直接连接到MySQL,SQLite, SQL SERVER,Access,Excel,Paradox,Lotus,dBase,Text和其他格式,并支持在这些格式之间转换。

你可以根据这个工具软件提供的向导界面,让你可以一步一步地完成转换工作。

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

【中文标题】South - 将 django 应用程序从 sqlite 迁移到 mysql【英文标题】:South - migrating django application from sqlite to mysql 【发布时间】:2012-03-03 07:35:33 【问题描述】:

我有一个 django 应用程序,直到现在我使用 sqLite 作为数据库后端。现在,当它非常接近生产时,我想将其全部转移到将在盒子上使用的 mySQL。

我将我的设置重新配置为 mysql 数据库并运行

manage.py syncdb --migrate

它开始创建表,但在第一次(共 40 个)迁移中都失败了,出现了一个旧错误(can't insert blob without key length 等等)。

我最初想到手动修复迁移文件,但很快意识到手动工作太多。

所以我想我会运行 manage.py migrate core 0040 (最后一次迁移,这会成功),但它仍然会尝试运行最初的迁移:

File "D:\~Sasha\Portman\core\migrations\0001_initial.py", line 23, in forwards
  ('name', self.gf('django.db.models.fields.TextField')(unique=True)),
... error message

有没有办法以某种方式迁移我的模型,而无需手动修复初始迁移文件和所有其他魔法?

【问题讨论】:

【参考方案1】:

首先,您无法选择要运行的迁移。 migrate core 0040 表示运行所有迁移 0040。换句话说,它不会运行 0041,但它运行 0001-0040。

现在,它稍微回避了您的问题,但如果您尚未将此项目移至生产环境,那么您实际上并不需要所有这些迁移。假设它们都是架构迁移,您可以通过以下方式回滚到零:

python manage.py migrate core zero

然后,将它们全部删除(包括 0001_initial.py)并再次运行:

python manage.py schemamigration --initial core

重新生成初始迁移。它将基于模型的当前状态,无需进行 40 次迁移。

在将新代码迁移到生产环境之前,像这样压缩迁移总是一个好主意。由于这是第一次发布,您可以将它们全部删除并从头开始,但在未来的迭代中,如果您在开发过程中生成 5 个迁移,在您提交之前,回滚到其中的第一个之前,然后删除这 5 个和然后生成一个新的架构迁移。结果只是一个迁移,其中包含这 5 个的所有更改。然后,您可以提交它并在生产中迁移。

这里可能不能完全解决你的问题,但肯定会让调试更简单。

【讨论】:

【参考方案2】:

在 mysql 后端部署项目时,我偶尔会遇到迁移问题。

由于您正在部署一个新副本,因此您确实有几个选项可以避免运行所有强大功能的需要:

首先,如果您想按原样维护您的迁移历史记录,您可以强制 syncdb 创建所有表而不考虑迁移,然后运行假迁移以使您的新数据库保持最新。看起来像:

python manage.py syncdb --all
python manage.py migrate --fake

或者,如果您不关心历史迁移,则可以清除旧迁移(只需删除它们),然后创建新的初始迁移,例如:

python manage.py schemamigration --initial core

请确保您还清除了开发数据库中的 south_migrationhistory 表,以便开发和生产之间的所有内容保持同步

【讨论】:

以上是关于如何优雅的将数据从sqlite3迁移到mysql的主要内容,如果未能解决你的问题,请参考以下文章

如何将 CSV 文件迁移到 Sqlite3(或 MySQL)? - Python

在 Django 中将 SQLite3 数据库迁移到 MySQL

将 SQLite3 迁移到 MySQL 的快速简便方法? [关闭]

从 sqlite3 迁移到 CoreData?

ruby Camaleon CMS将sqlite3迁移到mysql DB

django 10.5 sqlite3迁移到mysql