macOS下Django配置mysql,无法安装mysqlclient的问题
Posted littlesec
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了macOS下Django配置mysql,无法安装mysqlclient的问题相关的知识,希望对你有一定的参考价值。
最近跟着学校与企业合作的课程学习了Django,再一次理解MVC,真是感慨良多,打算先记录一些问题,至于整个学习过程的记录这个坑等毕业论文搞掂后慢慢填上。
上课老师使用的环境是win32的python3.6.x和Django 2.x。我个人的环境是macOS High Sierra的python3.4.3和Django 2.x。DBMS使用mysql,配置数据库的时候遇到一些问题。主要的是无法安装mysqlclient这个py第三方库。开发环境都使用vscode。
从Django数据库配置过程说起吧,并附上解决bug时所走过的弯路:
一、使用命令行操作mysql的路径问题。
首先是在mysql下创建数据库,流程不多说,具体的自己百度即可。如果是使用iTerm和oh-my-zsh的同志中间可能会有一个小bug,就是即使安装好了mysql,iTerm老是说找不到路径,其实用自带的terminal也一样,网上有教程说在进入mysql时应当这么操作:
1 PATH="$PATH":/usr/local/mysql/bin 2 mysql -u root -p
理论上来说第一句是加入路径,但其实,,,,并不其作用,不行你退出terminal或iTerm后再进入,输入 echo $PATH 试试。既然加入路径软的办法不吃,就吃硬的办法,直接打开并修改对应的配置文件。参考文章点击这里。
- 自带terminal的路径文件在 ~/.bash_profile ,在末尾追加一句 export PATH=$PATH:/usr/local/mysql/bin/; 即可。
- iTerm+zsh的路径文件在 ~/.zshrc ,在末尾追加同样的语句即可。
之后想通过命令行操作mysql的话就可以省略第一句加入路径的语句了。
其实可以测试一下,退出命令行窗口后再进入,然后输入通过 echo $PATH 看看路径,你会发现路径加入成功了。
二、创建数据库。
打开terminal或iTerm,输入 mysql -u root -p ,输入密码后进入mysql的操作。
之后就是正常的mysql语句操作啦,记得每句语句要以分号(;)结尾,这是sql语句的语法。
create database aisystem; --创建名为aisystem的数据库 use aisystem; --进入数据库
三、配置Django,无法安装mysqlclient的问题。
1、 在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)
2、在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:
所以这个方法也是不行的。
四、最后的解决办法。
这么去想,实际上也不一定要用mysqlclient这个第三方库来操作数据库。对于mysql这种老牌的开源DBMS(虽然这几年的遭遇挺惨的),python对它的操作肯定不止一个库。实际上从PyPi网上我们可以了解到,这个库经历了变迁,现在它的爸爸是PyMySQL了,所以我们大可以直接装PyMySQL pip3 install pymysql ,安装过程很顺利。
这时我们再试试 python3 manage.py migrate ,还是会报错:
但是细看报错会发现,它是找不到这个链接的模块,因为Django默认使用的模块名和我们装的不一样,这时候其实按照提示,点击(按下command再点击就能跳转)对应的py文件修改模块名即可。上面的截图报错挺长的,这里只是截取部分而已,需要修改的文件在后面,这里没有截图对应的报错提示。
大体来说是两个文件,反正修改完一个后,再运行,再提示,就能找到下一个需要修改的文件。实际上这些模块就是根模块名字不一样而已,子名字都一样,所以直接修改就好了。使用查找功能查找mysqlclient,然后替换成我们所装的pymysql即可。图中只是部分要修改的(我印象中不算注释,要修改的地方有5、6处吧)修改完后再次执行 python3 manage.py migrate ,就创建成功了。提示如下:
查看数据库就会发现多了这些表:
总得来说还是要善用报错提示吧,我跟人觉得像python这种解析型语言的报错比编译型的要友好得多。
另外给我的感觉mysql在mac平台下就是bug挺多的(相对其他成熟的软件来说),我想作为一个老牌的开源dbms,不应该配置起来这么麻烦,可能是我功力还不够吧。现阶段够用就行,不够再继续学。
以上是关于macOS下Django配置mysql,无法安装mysqlclient的问题的主要内容,如果未能解决你的问题,请参考以下文章
macOS Java EE开发环境搭建之MySQL下载安装及配置