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

abo*_*nov 3 mysql django database-migration django-south

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

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

manage.py syncdb --migrate
Run Code Online (Sandbox Code Playgroud)

它开始创建表,但是在第一次(40次)迁移中出现了一个旧的错误(无法插入没有密钥长度的blob以及所有这些).

我首先想到手动修复迁移文件,但很快意识到手动工作太多了.

所以我认为好的我将运行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
Run Code Online (Sandbox Code Playgroud)

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

Chr*_*att 5

首先,您无法选择要运行的迁移.migrate core 0040是指运行所有迁移多达 0040换句话说,它不会跑0041,但它运行0001-0040.

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

python manage.py migrate core zero
Run Code Online (Sandbox Code Playgroud)

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

python manage.py schemamigration --initial core
Run Code Online (Sandbox Code Playgroud)

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

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

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