Django中把SQLite數據庫轉換為Mysql數據庫的配置方法


我們在學習和開發Django的時候,一般是使用SQLite作為數據庫。在正式講網站部署上線是用MySQL數據庫比較多。MySQL支持高並發的訪問,而且相對於SQLite,MySQL性能更好。下面講講如何在Django下安裝和使用MySQL。

1、下載MySQL

打開MySQL Community Server下載頁面,這里我下載Windows最新版本的zip包,如下圖所示。

 

這里我用8.0的版本,官方說它要比5.7的版本快。若你之前使用的是5.7版本,照舊使用5.7也行。

 

2、安裝MySQL

下載完成之后,解壓zip包,再把整個解壓之后的結果放到C盤(其他盤也可以)。打開這個MySQL文件夾,里面的文件如下圖所示:

 

 

3、配置MySQL

這里MySQL的安裝目錄為C:\mysql-8.0.15-winx64,記住該路徑,等下我們配置的時候需要用到。

在該安裝目錄下,新建一個文件叫my.ini。打開該文件,並寫入如下內容:

[mysqld]
# 設置mysql的安裝目錄,我們實際存放MySQL的目錄
basedir=C:/mysql-8.0.15-winx64
# 設置mysql數據庫的數據的存放目錄
datadir=C:/mysql-8.0.15-winx64/data
# 設置默認使用的端口
port=3306
# 允許最大連接數
max_connections=200
# 允許連接失敗的次數。這是為了防止有人試圖攻擊數據庫
max_connect_errors=10
# 服務端使用的字符集
character-set-server=utf8mb4
# 數據庫字符集對應一些排序等規則使用的字符集
collation-server=utf8mb4_general_ci
# 創建新表時將使用的默認存儲引擎
default-storage-engine=INNODB
# 默認使用“mysql_native_password”插件作為認證加密方式
# MySQL8.0默認認證加密方式為caching_sha2_password
default_authentication_plugin=mysql_native_password
 
[mysql]
# 設置mysql客戶端默認字符集
default-character-set=utf8mb4
 
[client]
default-character-set=utf8mb4
port=3306

 

其中,要注意幾個配置:

1、配置路徑要注意斜杠的寫法,要么寫"\\",要么寫"/";

2、數據庫數據存放的目錄需要確保文件夾存在,所以我們需要手動在我們指定的目錄創建一個data文件夾;

3、MySQL8.0的默認認證加密方式和之前版本不同,為了兼容,設置為mysql_native_password,若不設置,后面會報錯,詳情見Django2.x連接MySQL8.x的錯誤解析.

更多配置可以參考MySQL的文檔

 

4、把MySQL的bin目錄加入環境變量

為了方便使用命令,把MySQL的bin目錄的路徑加入系統環境變量Path中。

我們現在MySQL安裝路徑為C:\mysql-8.0.15-winx64,則bin目錄的路徑為C:\mysql-8.0.15-winx64\bin。記住該路徑,根據你具體情況設置。

右鍵我的電腦,選擇“屬性”-->“環境變量”。

 

找到“Path”這一項,雙擊打開編輯。光標定位到末尾,輸入一個英文狀態下的分號,再粘貼bin目錄的路徑進去,再保存即可。

設置好之后,后面我們可以直接在cmd直接使用MySQL的相關命令。

5、初始化MySQL

打開cmd,快捷鍵“win+R”,輸入cmd再回車,即可打開cmd。

執行初始化命令,該命令會創建一個密碼為空的root用戶。

mysqld --initialize-insecure --user=mysql --console

 

執行初始化命令成功之后,再執行下面的命令,安裝mysql服務:

mysqld --install

 

安裝服務成功之后,啟動服務:

net start mysql

 

這樣,mysql服務就啟動了。

ps:若你想刪除mysql服務可以執行“sc delete mysql”命令。

6、修改root用戶的密碼

上面步驟成功之后,可以在cmd輸入如下命令進入MySQL:

mysql -u root -p

-u root 是指定root用戶登錄,-p 是要求輸入密碼。剛剛初始化創建的密碼為空,要求輸入密碼的時候,直接回車即可。成功登錄進去,即可看到如下界面:

 

輸入如下SQL語句,修改root用戶的密碼:

alter user 'root'@'localhost' identified by '你的密碼';

 ps:如果之前已經安裝並使用過Mysql,可跳過1-6步驟,直接進行第7步驟。

7、為Django項目創建數據庫

Django項目有自己的數據庫,我們需要在MySQL中創建一個數據庫給Django使用。登錄MySQL后,輸入如下SQL語句創建數據庫:

CREATE DATABASE 你的數據庫名稱 DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE utf8_unicode_ci;

ps:這里的字符集用utf8mb4和規則用utf8mb4_unicode_ci都可以。記得輸入你的數據庫名稱哦~

8、為Django專門管理該項目數據庫的MySQL用戶

在這里,我不建議使用root用戶直接管理數據庫。為了安全考慮,我們需要創建一個用戶專門管理我們Django項目的數據庫。

在MySQL內輸入如下SQL語句創建用戶:

CREATE USER '你的用戶名'@'localhost' IDENTIFIED BY '你的密碼';

 

接下,再把剛剛創建的數據庫的管理權限給予剛剛創建的MySQL用戶:

GRANT ALL PRIVILEGES ON 你的數據庫名.* TO '你的用戶名'@'localhost';

 

最后,刷新權限:

FLUSH PRIVILEGES;

 

ps:把“你的數據庫名”、“你的用戶名”和“你的密碼”改成你對應的內容哦。

9、安裝mysqlclient

Django要使用MySQL的話,需要安裝mysqlclient庫。

你可以直接執行pip install mysqlclient命令,進行安裝。但這個在windows系統可能會報錯,編譯不了。

這種情況,可以用whl包安裝該庫。打開https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient,下載對應python版本和windows版本的mysqlclient文件。例如我的電腦python是3.6版本,windows是64位,需要下載的版本為帶有cp36,win_amd64字樣的文件。

下載完成之后,cmd進入該文件的目錄,用pip安裝即可(下面用到具體文件名,這個根據看你下載的輸入命令):

pip install mysqlclient-1.3.13-cp36-cp36m-win_amd64.whl

 

10、修改Django數據庫配置

打開你的Django項目的settings.py文件,找到DATABASES的配置。我們之前的SQLite配置如下:

 

現在將其改成:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': '你的數據庫名',
        'USER': '你的MySQL用戶名',
        'PASSWORD': '你的密碼',
        'HOST': 'localhost',
        'PORT': '3306',
    }
}

 

ps:把上面那些“你的。。。”對應改一下。

11、用數據庫遷移文件創建數據庫的表

之前我們開發的時候,多少會生成一些數據庫遷移文件。沒有的話,用python manage.py makemigrations生成一下。

用如下命令應用遷移文件,這樣數據庫中的表也跟着創建。

python manage.py migrate

如果之前跳過1-6步驟的,沒有把 MySQL8.0的認證加密方式設置為mysql_native_password,則執行遷移命令的時候,將會報錯(django.db.utils.OperationalError: (2059, <NULL>)),詳情見Django2.x連接MySQL8.x的錯誤解析.

12、把SQLite數據導入到MySQL中

如果我們之前開發的數據有用或者想搬到MySQL數據庫中,我們需要把數據遷移過去。

數據從一個數據庫搬到另外一個數據庫,只需要兩個步驟。舊數據庫導出數據,新數據庫導入數據。

 

1)SQLite導出數據

先將Django的數據庫配置改回來:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

 

然后,在cmd執行導出命令:

python manage.py dumpdata > data.json

 

這樣就將數據導出到Django項目根目錄下的data.json文件。

 

2)MySQL導入數據

同樣,先將Django的數據庫配置改為MySQL的:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': '你的數據庫名',
        'USER': '你的MySQL用戶名',
        'PASSWORD': '你的密碼',
        'HOST': 'localhost',
        'PORT': '3306',
    }
}

 

然后,在cmd執行導入命令:

python manage.py loaddata data.json

 

這里需要等一下,而且可能會出錯。注意出錯的時候所報的錯誤信息。如果提示有重復主鍵,那需要先刪掉數據。這些數據是在給MySQL數據庫應用遷移文件的時候產生的,一般是content_type相關的表。

進入到MySQL,執行如下的SQL語句:

use 你的數據庫名;
delete from auth_permission;
delete from django_content_type;

 

刪除數據之后,再執行一次導入命令即可。基本上,導入不了數據都是MySQL存在數據導致的。

其他注意事項:加載時區表

另外,有可能所安裝的MySQL沒有加載時區表。這個可能會導致filter對日期的查詢有問題。Django官方文檔也指出這個問題。MySQL官網也有對應處理方法:加載時區表

Linux/Mac解決方法都很簡單。windows系統要先下載一個sql文件:timezone_2018e_posix_sql.zip

下載完成之后,解壓得到一個sql文件,再執行cmd命令導入該文件即可:

mysql -u root -p mysql < timezone_posix.sql

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM