1. 程式人生 > >Python3.4/3.5+Django1.8.16連線MySQL

Python3.4/3.5+Django1.8.16連線MySQL

Django自帶的資料庫是SQLite,而我對MySQL熟一些,所以還是讓Django用MySQL資料庫吧。Python版本方面,我虛擬機器Ubuntu16.04上用的是Python3.5,阿里雲Ubuntu14.04用的是Python3.4。

這就帶來了一個問題:Django中連線資料庫的模組MySQLdb不支援Python3,我們還需要找替代方法來連線MySQL。

1. Python3中連線MySQL的替代方法

百度、谷歌可以發現pymysql模組是最常見的替代方法。參考http://stackoverflow.com/questions/4960048/python-3-and-mysql。裡面的採納答案列舉了很多替代方法,其中mysql-connector-python是oracle官方支援的模組,但是與MySQLdb不相容讓我有點擔心。Django原始碼中應該有很多地方都用到MySQLdb,不相容的話可能會出問題。而pymysql能夠“almost completely”相容MySQLdb,這是它最大的優點。

(1) 安裝pymysql

pip3 install PyMySQL

在阿里雲上pip3下載失敗,只能下載pymysql原始碼進行安裝了。去pypi搜pymysql,注意不要用pymysql3(pymysql3的頁面已經提示DO NOT USE THIS. PyMySQL support Python 3 already.),而是用pymysql。下載到任意一個地方,解壓,python3 setup.py install就行了。

(2) Django專案中設定__init__.py

我對Python也是一知半解,所以也不太清楚__init__.py的作用。以下說明摘自Angelia的專欄http://blog.csdn.net/yxmmxy7913/article/details/4233420

原來在python模組的每一個包中,都有一個__init__.py檔案(這個檔案定義了包的屬性和方法)然後是一些模組檔案和子目錄,假如子目錄中也有 __init__.py 那麼它就是這個包的子包了。當你將一個包作為模組匯入(比如從 xml 匯入 dom )的時候,實際上匯入了它的 __init__.py 檔案。

一個包是一個帶有特殊檔案 __init__.py 的目錄。__init__.py 檔案定義了包的屬性和方法。其實它可以什麼也不定義;可以只是一個空檔案,但是必須存在。如果 __init__.py 不存在,這個目錄就僅僅是一個目錄,而不是一個包,它就不能被匯入或者包含其它的模組和巢狀包。

總之,我暫且將__init__.py理解為這個Django專案中執行初始化的指令碼,它是先於其他指令碼、程式執行的。

在Django專案目錄下有個與專案同名的目錄,裡面就有__init__.py。一般而言,它是空的,我們只需加上:

import pymysql
pymysql.install_as_MySQLdb()

這樣,在一開始我們就使用了pymysql來替代了MySQLdb。

2. 將Django專案資料庫改成MySQL

這個沒啥好說的。在setting.py找到DATABASES這一塊,就這樣改:


當然,NAME就是資料庫名字咯,自己先建立一個數據庫吧。比如建立一個叫mydb的資料庫:create database mydb default charset utf8 collate utf8_general_ci;

準確地說,1-1安裝pymysql是建立Django專案前就應該做的,1-2和2都是在配置每個Django專案要做的。

就醬。