最近跟着学校与企业合做的课程学习了Django,再一次理解MVC,真是感慨良多,打算先记录一些问题,至于整个学习过程的记录这个坑等毕业论文搞掂后慢慢填上。php
上课老师使用的环境是win32的python3.6.x和Django 2.x。我我的的环境是macOS High Sierra的python3.4.3和Django 2.x。DBMS使用mysql,配置数据库的时候遇到一些问题。主要的是没法安装mysqlclient这个py第三方库。开发环境都使用vscode。html
从Django数据库配置过程提及吧,并附上解决bug时所走过的弯路:python
1、使用命令行操做mysql的路径问题。mysql
首先是在mysql下建立数据库,流程很少说,具体的本身百度便可。若是是使用iTerm和oh-my-zsh的同志中间可能会有一个小bug,就是即便安装好了mysql,iTerm总是说找不到路径,其实用自带的terminal也同样,网上有教程说在进入mysql时应当这么操做:git
1 PATH="$PATH":/usr/local/mysql/bin 2 mysql -u root -p
理论上来讲第一句是加入路径,但其实,,,,并不其做用,不行你退出terminal或iTerm后再进入,输入 echo $PATH 试试。既然加入路径软的办法不吃,就吃硬的办法,直接打开并修改对应的配置文件。参考文章点击这里。github
以后想经过命令行操做mysql的话就能够省略第一句加入路径的语句了。sql
其实能够测试一下,退出命令行窗口后再进入,而后输入经过 echo $PATH 看看路径,你会发现路径加入成功了。数据库
2、建立数据库。django
打开terminal或iTerm,输入 mysql -u root -p ,输入密码后进入mysql的操做。bash
以后就是正常的mysql语句操做啦,记得每句语句要以分号(;)结尾,这是sql语句的语法。
create database aisystem; --建立名为aisystem的数据库 use aisystem; --进入数据库
3、配置Django,没法安装mysqlclient的问题。
一、 在models.py里建立实体类
1 # 实体类 2 class TUser(models.Model): 3 userId = models.AutoField(primary_key=True, unique=True) # 自增,主键通常自增 4 username = models.CharField(max_length=50) # 必须指定最大程度,默认varchar 5 password = models.CharField(max_length=50)
二、在setting.py设置DATABASES属性
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'aisystem', # 已经建好的数据库名 'USER': 'root', 'PASSWORD': 'abc', 'HOST': '127.0.0.1', 'PORT': 3306, } }
这里ENGINE默认是sqlite的,在此修改为mysql,Django2.x提供的数据库引擎只有4种,参考官方文档。
3. 建立映射和表
这就ORM的优点就发挥出来了,咱们使用Django来建立映射和数据库的表,这样能快速建立表并与实体类一一映射。
在vscode打开终端(快捷键:control + ~)输入命令: python3 manage.py makemigrations ,这是建立映射,效果。。。。我忘了截图了,反正会提示成功,不成功的话按照提示操做解决bug吧。并且项目里会多了一个文件夹magration如图:
以后经过Django直接在数据库中建立表。命令以下: python3 manage.py migrate ,这是会提示没有数据库引擎对应的py库,是否须要安装mysqlclient。正常来讲使用 pip3 install mysqlclient 就好了,问题是在这个环境下居然有以下提示:
Command "python setup.py egg_info" failed with error code 1 in /private/var/folders/qq/wfb_clcj46bg5zm_p6vf_wbw0000gn/T/pip-build-_g_2al4o/mysqlclient/
这时到mysqlclient的GitHub上找解决办法以及它提示的mysql的bug反馈网中按照他们的操做解决也是不行的。
可能会想到直接下载源码而后使用 python3 setup.py install 可是会报出这样的bug:
因此这个方法也是不行的。
4、最后的解决办法。
这么去想,实际上也不必定要用mysqlclient这个第三方库来操做数据库。对于mysql这种老牌的开源DBMS(虽然这几年的遭遇挺惨的),python对它的操做确定不止一个库。实际上从PyPi网上咱们能够了解到,这个库经历了变迁,如今它的爸爸是PyMySQL了,因此咱们大能够直接装PyMySQL pip3 install pymysql ,安装过程很顺利。
这时咱们再试试 python3 manage.py migrate ,仍是会报错:
可是细看报错会发现,它是找不到这个连接的模块,由于Django默认使用的模块名和咱们装的不同,这时候其实按照提示,点击(按下command再点击就能跳转)对应的py文件修改模块名便可。上面的截图报错挺长的,这里只是截取部分而已,须要修改的文件在后面,这里没有截图对应的报错提示。
大致来讲是两个文件,反正修改完一个后,再运行,再提示,就能找到下一个须要修改的文件。实际上这些模块就是根模块名字不同而已,子名字都同样,因此直接修改就行了。使用查找功能查找mysqlclient,而后替换成咱们所装的pymysql便可。图中只是部分要修改的(我印象中不算注释,要修改的地方有五、6处吧)修改完后再次执行 python3 manage.py migrate ,就建立成功了。提示以下:
查看数据库就会发现多了这些表:
总得来讲仍是要善用报错提示吧,我跟人以为像python这种解析型语言的报错比编译型的要友好得多。
另外给个人感受mysql在mac平台下就是bug挺多的(相对其余成熟的软件来讲),我想做为一个老牌的开源dbms,不该该配置起来这么麻烦,多是我功力还不够吧。现阶段够用就行,不够再继续学。