zoukankan      html  css  js  c++  java
  • 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,不应该配置起来这么麻烦,可能是我功力还不够吧。现阶段够用就行,不够再继续学。

  • 相关阅读:
    JS使用 popstate 事件监听物理返回键
    JQ判断div是否隐藏
    SQL Server DATEDIFF() 函数
    取消a或input标签聚焦后出现虚线框
    C#定时任务
    C# 保留N位小数
    C#打印单据
    SQL语句创建函数
    SVN检出新项目
    解决jQuery的toggle()的自动触发问题
  • 原文地址:https://www.cnblogs.com/LittleSec/p/8854862.html
Copyright © 2011-2022 走看看