最近跟着學校與企業合做的課程學習了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,不該該配置起來這麼麻煩,多是我功力還不夠吧。現階段夠用就行,不夠再繼續學。