macOS下Django配置mysql,沒法安裝mysqlclient的問題

最近跟着學校與企業合做的課程學習了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

  • 自帶terminal的路徑文件在 ~/.bash_profile ,在末尾追加一句 export PATH=$PATH:/usr/local/mysql/bin/; 便可。
  • iTerm+zsh的路徑文件在 ~/.zshrc ,在末尾追加一樣的語句便可。

以後想經過命令行操做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,不該該配置起來這麼麻煩,多是我功力還不夠吧。現階段夠用就行,不夠再繼續學。

相關文章
相關標籤/搜索