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

修改完成后,重新刷新数据库,再次启动项目,应该正常。

 

以上为查询网上资料后总结的方法,只作为个人参考~

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