南 - 从sqlite到mysql的迁移django应用程序
我有一个django应用程序,直到现在我用sqLite作为数据库后端。现在,当它接近生产时,我想把它全部移到mySQL上,它将被用在盒子上。南 - 从sqlite到mysql的迁移django应用程序
我重新配置我的设置到MySQL数据库和运行
manage.py syncdb --migrate
它开始创建表和所有,但在第一(满分40)的迁移失败,一个旧的错误(can't insert blob without key length和所有)。
我首先想到手动修复迁移文件,但很快意识到有太多的手动工作。
所以我想,好吧,我会跑manage.py迁移核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
有以某种方式迁移我的模型,而无需手动修复初始迁移文件和所有其他魔法的方法?
首先,您不能选择要运行的迁移。 migrate core 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后端项目时看到了迁移问题。
由于要部署一个新的副本,你有回避了需要运行所有mightations的一对夫妇的选择:
首先,如果你想保持你的移民历史,是,你可以强制syncdb创建所有表,无论迁移如何,然后运行伪迁移以使您的新数据库保持最新状态。这将是这样的:
python manage.py syncdb --all
python manage.py migrate --fake
或者,如果你不关心你的历史迁移,你可以清除旧迁移出去(只删除),然后创建一个新的初始迁移,如:
python manage.py schemamigration --initial core
只要确保你也清楚了south_migrationhistory
表中您的开发数据库,使一切保持同步开发和督促
烨之间,即做到了:)谢谢! – abolotnov 2012-02-10 23:58:55