django中切換數據庫源爲mysql時的踩坑

一、問題描述:

django中默認的數據是sqlite,但是我們正常使用都是mysql,所以就按照官網的教程配置修改settings.py中的數據庫配置,項目初始化文件__init__.py, 如下:

1、settings.py

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

# 修改成mysql如下
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'test',    # 你的數據庫名稱
        'USER': 'root',   # 你的數據庫用戶名
        'PASSWORD': '123456',  # 你的數據庫密碼
        'HOST': '',  # 你的數據庫主機,留空默認爲localhost
        'PORT': '3306',  # 你的數據庫端口
    }}

2、__init__.py

# 由於mysql默認引擎爲MySQLdb,在__init__.py文件中添加下面代碼
# 在python3中須替換爲pymysql,可在主配置文件(和項目同名的文件下,不是app配置文件)中增加如下代碼
import pymysql
pymysql.install_as_MySQLdb()
# 如果找不到pymysql板塊,則通過pip install pymysql進行安裝。

3、按照教程說,完成上面兩步後,重新運行如下命令更新初始化數據庫就可以了。

python manage.py makemigrations

python manage.py migrate

4、然而,按照如下配置後,運行報錯如下:

django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.
Did you install mysqlclient?

# 等你安裝pip install pymysql後,繼續報錯如下:
mysqlclient 1.3.3 or newer is required 。。。。

二、問題定位

1、檢查了安裝的django版本爲3.0.6, pymysql的版本爲 0.9.3

2、經過查找資料定位,發現報錯的原因是django版本太高,pymysql0.9.3不支持。

三、問題解決方法

1、django降級到能支持的版本,2.1.4版本就OK了

pip install --upgrade django==2.1.4

更新版本成功後運行django刷新數據庫的命令,再次啓動項目,發現已經正常。

2、不去降級django版本,繼續使用django3,這樣的話,解決起來就相對麻煩很多了(需要修改源碼)。

#找到Python環境下 django包,並進入到backends下的mysql文件夾
cd /opt/anaconda3/envs/envAGC_Mini/lib/python3.6/site-packages/django/db/backends/mysql
#文件列表如下

# 找到base.py文件,註釋掉 base.py 中如下部分(35/36行)
if version < (1, 3, 3):
     raise ImproperlyConfigured("mysqlclient 1.3.3 or newer is required; you have %s" % Database.__version__)

此時仍會會報錯,報錯信息如下:

AttributeError: ‘str’ object has no attribute ‘decode’

#找到operations.py文件(46行,版本不同行數不同哈~自個兒find一下),將decode改爲encode
#linux vim 查找快捷鍵:?decode
if query is not None:
    query = query.decode(errors='replace')
return query
#改爲
if query is not None:
    query = query.encode(errors='replace')
return query

修改完成後,重新刷新數據庫,再次啓動項目,應該正常。

 

以上爲查詢網上資料後總結的方法,只作爲個人參考~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章