在配置Django开发环境时,为了用到Django自带的数据模型,使用python manage.py migrate
对数据进行迁移,所谓迁移,就是根据模型自动生成关系数据库中的二维表。
报错分析
在实际操作过程中我先后遇到如下两种报错信息:
意思是说我的mysqlclient版本过低,但是我在退出虚拟环境后通过
pip list
检查出版本是最新的,进入虚拟环境后就显示不出来了,pip也不能用,尝试了网上各种方法无果,猜想可能是我虚拟环境的配置出了问题,我觉得如果不在虚拟环境内进行数据迁移的话可能不会有问题,但是毕竟虚拟环境是Python开发神器,还是很想把虚拟环境配置好。
Stackoverflow上有一个人针对这个错误提供了一个方案,大致的思路是对虚拟环境下的后台mysql文件进行修改,在版本检测这一环节对检测到低于1.3.13版本的mysqlclient采取直接pass的措施,不捕捉异常,经测试有效。具体操作过程见参考引用中的链接。
最后通过virtualenvwrapper创建虚拟环境解决了问题,将所有的虚拟环境目录全都集中起来,比如放到 ~/Envs/,并对不同的虚拟环境使用不同的目录来管理。并且,它还省去了每次开启虚拟环境时候的 source 操作,使得虚拟环境更加好用。1
mysqlclient 1.3.13 or newer is required; you have 0.9.3
在第一个问题解决后,我在新的虚拟环境重新配置,同样进行到
python manage.py migrate
步骤时出现了如下问题,意思是说我的SQL语法有问题,但是因为当时我只进行了一步CREATE database
的操作,并且操作成功,所以排除我SQL语句错误的可能性。后来了解到Django 2.0已经停止了对MySQL 5.5的支持,而我系统安装的MySQL正好是5.5版本的,于是尝试用MySQL 5.7替换,最后问题得到解决。1
django.db.utils.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(6) NOT NULL)' at line 1")
参考引用
更新(2019-08-04)
之前的学习都是跟着Github上的Python-100-Days操作的,全程用命令行Vim操作,用了一段时间觉得操作不是很方便,今天重新用Pycharm操作Django项目,另外为了避免之前的问题用的是Django自带的Sqlite数据库而不是Mysql,一路下来很顺畅。另外个人觉得Python-100-Days的教程太过笼统,更适合作为一个学习路线和查漏补缺。