20180412更新
今天2018年4月12号,一个月之后,又遇到了同样的问题,不过这次,我没有用一天时间,
我用了10分钟排查出了错误。补充一些心得。
作为一个写程序的小白,刚接触一些框架的时候,就会觉得,写框架的好牛逼,都是大佬,技术杠杠的,所以框架很好用。这段话前面没有问题,但是这个三段论的论断是有问题的。框架不可能没有bug,你首先要注意到这一点。然后你要注意到语言不可能没有bug,系统不可能没有bug,软件不可能没有bug,做得好bug就少,你就不容易遇到,反之也成立。
所以我在这里姑且猜测一下django的这个(今天遇到的)bug,(版本1.10.4,最早的版本是之前的2.0.3)。当你已经使用django建立了数据表之后,你再次修改了其中一个表,例如我们称之为t_table1,并且新建了一张表t_table2,在t_table2中使用t_table1作为外键,当你migrate时,程序报错,t_table1不存在。
解决方法是不要慌,慢慢处理,按照提示来操作,不要随便删除迁移数据和数据表,其实很简单。
1:版本
django:2.0.3
Python:3.5.2
mysql版本:Ver14.14 Distrib 5.5.44,for debian-linux-gnu(x86_64)
2:问题描述
在使用django带有的ORM建表,先是建立了一张app表,但是需要对其增加字段,一个datatime类型的,之后程序出现提示,建表出错。于是将整个表删除,依然错误,于是将整个数据库删除,依然错误。再将工程中自动生成的migrations下的文件删除,依然错误。
3:错误提示
mysql语法错误
ps:并且在我新建了一个django的项目后,并且在新建项目中使用和之前不同的数据库,不同的模型来重新使用django自带的ROM'建表。依然报相同的错误(请仔细理解这句话,重点是错误居然是相同的!!!)。
4:尝试解决
4.1:重启试试(重启电脑)--失败
4.2:重新安装django(相同版本)-- 失败
4.3:尝试去找到mysql建表语句的生成位置– 失败,技术不佳没找到
4.4:最后的挣扎,换到Python2.7上,安装相应模块。-- 成功
5:原因猜测
这里只能说是原因猜测,因为确实没有发现问题在哪里(失败)。
首先,不可能在系统缓存,因为已经重启了电脑。再来,因为执行这条语句(pythonmanage.pymigrate)时,相当于始终在执行之前失败的建表语句,而和现在需要执行的语句没有关系。所以问题存在于django和Python中。django已经重新安装,但是不排除资源没有被清理完的情况(各位搬砖轻拍)。目前的解决是换到了Python2.7。
体会到了老版本的稳定性和支持性确实比新版本好。
6:贴上网上的一些相同问题的解决办法,但是我并没有成功(捂脸)。
Django删除表遇到的一些错误:http://blog.csdn.net/gdky005/article/details/78271163
查看django执行过的sql:https://www.cnblogs.com/liuq/p/5946166.html