標籤:database name blog 第三方 SQ ref back 階段 sys
最近跟著學校與企業共同作業的課程學習了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/bin2 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) # 必須指定最大程度,預設varchar5 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的問題