zhqinux 发表于 2019-4-4 23:47

[笔记]Django2.2连接数据库的坑

先说环境:
python是3.6,Django是2.2,数据库是mariadb10.3
Django的官方文档里给出了连接mysql/mariadb数据库的两种方式:
1. mysqlclient 开源产品
2. mysql connector/python oracle公司的产品

我去翻了一下mysqlclient的安装说明,作者很明确的说了这个项目在Mac机器上bug,我就没再继续看下去,不知道到底是啥bug,反正我对速度没有太高的要求,用纯python的实现更方便一些
也怪我太浪......我没去使用oracle公司的东西,而是选择了另外一个纯python实现,叫做pymysql
顺利引入pymysql,import pymysql; pymysql.install_as_mysqlclient()后,在settings.py文件中添加数据库连接设置时,问题来了
程序报错,提示 “mysqlclient 1.3.13 or newer is required; you have 0.9.3.”

我查了一下pymysql的最新版本,GitHub上的确是0.9.3,大写的尴尬{:1_896:}
我抱着先跑起来的打算,根据报错信息追踪到了抛出异常的文件
/path/to/your/python-version/lib/site-packages/django/db/backends/mysql/base.py
找到:

这里是一个简单判断,如果version < 1.3.13直接抛出异常,我注释掉了这两行

但是问题还没完,数据库的确是连上了,但当我试着创建自定义model并python manage.py migrate时,问题又来了

这次报错是:attributeerror 'str' object has no attribute 'decode'

到了这种地步,我已经准备尝试换oracle公司的库了,抱着死也要死个明白的心理,追踪到这个报错文件的位置
/path/to/your/python-version/lib/site-packages/django/db/backends/mysql/oprations.py
找到:

这个是我修改过的,以前是
if query is not None:
    query = query.decode(errors='replace')



这第二个异常,我觉得不仅仅是pymysql的问题,很可能mysql connector/python 也会出现这样的异常

记录下来,以备日后查找



yesheng607 发表于 2019-4-5 01:09

2.2能用了么,不是最多支持2.0么?

ilovesusu 发表于 2019-4-14 22:19

找了半天原来是上游的问题啊   盲目升级就是容易出问题啊

superzhangxue 发表于 2019-4-16 23:18

django2.0以上的版本只支持MySQL5.5以上的版本,需要的小伙伴看下!

geniusjoy 发表于 2019-4-17 23:04

macos 直接使用mysqlclient
页: [1]
查看完整版本: [笔记]Django2.2连接数据库的坑