数据库
首页 > 数据库> > 南 – 将django应用程序从sqlite迁移到mysql

南 – 将django应用程序从sqlite迁移到mysql

作者:互联网

我有一个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

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

解决方法:

首先,您无法选择要运行的迁移.迁移核心0040意味着运行所有迁移到0040.换句话说,它不会运行0041,但它将运行0001-0040.

现在,它只是稍微踩了一下你的问题,但是如果你还没有将这个项目转移到生产中,那么你实际上并不需要所有这些迁移.假设它们都是schemamigrations,您可以使用以下命令回滚到零:

python manage.py migrate core zero

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

python manage.py schemamigration --initial core

要重新生成初始迁移.它将使其脱离模型的当前状态,从而无需进行40次迁移.

在将新代码转移到生产环境之前,最好先压缩这样的迁移.由于这是第一次启动,您可以将它们全部删除并从头开始,但在将来的迭代中,如果您在开发过程中生成5次迁移,在提交之前,回滚到第一次之前,则删除那些5和然后生成一个新的schemamigration.结果只是一次迁移,其中包含那些5的所有更改.然后,您可以提交并在生产中迁移.

它可能无法完全解决您的问题,但它肯定会使调试更简单.

标签:mysql,django,database-migration,django-south
来源: https://codeday.me/bug/20190729/1574643.html