django 2.2和mysql使用的常见问题


Posted in Python onJuly 18, 2019

可能是由于Django使用的MySQLdb库对Python3不支持,我们用采用了PyMySQL库来代替,导致出现各种坑,特别是执行以下2条命令的是时候:

python manage.py makemigrations
or
python manage.py inspectdb

第一个坑(提示你的mysqlclient版本过低)

无聊你是否执行pip install mysqlclient安装的最新版的,都抛出:

django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.3 or newer is required; you have 0.7.11.None

MD,LZ看到这错误太想骂人了,没办法采取网上的方法,注释大法!

找到Python安装路劲下的Python36-32\Lib\site-packages\django\db\backends\mysql\base.py文件

将文件中的如下代码注释(可能需先关闭pycharm IDE)

if version < (1, 3, 3):
  raise ImproperlyConfigured("mysqlclient 1.3.3 or newer is required; you have %s" % Database.__version__)

第二个坑(str类型没有decode方法)

对对对,py3默认str是unicode编码,通过encode方法编码成bytes类型,后者才有decode解码方法。
提示错误来源:Python36\lib\site-packages\django\db\backends\mysql\operations.py", line 149, in last_executed_query

这里网上一搜一堆的把encode改成decode方法,我靠,这谁的脑洞无敌了
源方法内容(pip安装的django 2.2.1原封不动的内容):

def last_executed_query(self, cursor, sql, params):
    # With MySQLdb, cursor objects have an (undocumented) "_executed"
    # attribute where the exact query sent to the database is saved.
    # See MySQLdb/cursors.py in the source distribution.
    query = getattr(cursor, '_executed', None)
    if query is not None:
      query = query.decode(errors='replace')
    return query

通过print大法输出query结果,内容为

SELECT @@SQL_AUTO_IS_NULL

数据类型为str

这里网上还有注释大法,LZ不知道注释了if的后遗症是啥有没有影响,于是也没采纳。

于是我去django的github去翻这个文件这个方法的最新/历史版本,结果最新master分支内容如下:

def last_executed_query(self, cursor, sql, params):
    # With MySQLdb, cursor objects have an (undocumented) "_executed"
    # attribute where the exact query sent to the database is saved.
    # See MySQLdb/cursors.py in the source distribution.
    # MySQLdb returns string, PyMySQL bytes.
    return force_str(getattr(cursor, '_executed', None), errors='replace')

看函数名,应该是强制去把SQL转换成str了

我靠!!!这尼玛官网2.2.1/2.2.2(当前最新版)的包不是害人么,记得该文件上面引入下这个方法

from django.utils.encoding import force_str

然后再执行managa.py命令,可以了

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现的一个简单LRU cache
Sep 26 Python
python操作redis的方法
Jul 07 Python
详解Python爬虫的基本写法
Jan 08 Python
python+matplotlib绘制旋转椭圆实例代码
Jan 12 Python
python用post访问restful服务接口的方法
Dec 07 Python
详解用Python实现自动化监控远程服务器
May 18 Python
在Python中利用pickle保存变量的实例
Dec 30 Python
基于python实现上传文件到OSS代码实例
May 09 Python
为什么是 Python -m
Jun 19 Python
python3 中时间戳、时间、日期的转换和加减操作
Jul 14 Python
详解PyQt5中textBrowser显示print语句输出的简单方法
Aug 07 Python
python之np.argmax()及对axis=0或者1的理解
Jun 02 Python
详解Python二维数组与三维数组切片的方法
Jul 18 #Python
Django框架视图介绍与使用详解
Jul 18 #Python
python3 中的字符串(单引号、双引号、三引号)以及字符串与数字的运算
Jul 18 #Python
使用django实现一个代码发布系统
Jul 18 #Python
python 将字符串中的数字相加求和的实现
Jul 18 #Python
TensorFlow实现简单的CNN的方法
Jul 18 #Python
windows上安装python3教程以及环境变量配置详解
Jul 18 #Python
You might like
数据库中排序的对比及使用条件详解
2012/02/23 PHP
破解.net程序(dll文件)编译和反编译方法
2013/01/31 PHP
Codeigniter(CI)框架分页函数及相关知识
2014/11/03 PHP
yii2中的rules 自定义验证规则详解
2016/04/19 PHP
PHP针对伪静态的注入总结【附asp与Python相关代码】
2017/08/01 PHP
基于逻辑运算的简单权限系统(实现) JS 版
2007/03/24 Javascript
javascript 学习之旅 (1)
2009/02/05 Javascript
ext combox 下拉框不出现自动提示,自动选中的解决方法
2010/02/24 Javascript
jquery 使用点滴函数代码
2011/05/20 Javascript
现如今最流行的JavaScript代码规范
2014/03/08 Javascript
js统计页面的来访次数实现代码
2014/05/09 Javascript
js返回前一页刷新本页重载页面
2014/07/29 Javascript
jQuery使用$.ajax进行即时验证的方法
2015/12/08 Javascript
Javascript复制实例详解
2016/01/28 Javascript
jquery插件uploadify多图上传功能实现代码
2016/08/12 Javascript
详解React之父子组件传递和其它一些要点
2018/06/25 Javascript
create-react-app 修改为多入口编译的方法
2018/08/01 Javascript
详解CommonJS和ES6模块循环加载处理的区别
2018/12/26 Javascript
基于纯JS实现多张图片的懒加载Lazy过程解析
2019/10/14 Javascript
Layui数据表格之单元格编辑方式
2019/10/26 Javascript
JQuery常用简单动画操作方法回顾与总结
2019/12/07 jQuery
基于Element封装一个表格组件tableList的使用方法
2020/06/29 Javascript
详解Python的Django框架中的通用视图
2015/05/04 Python
Python数据类型详解(三)元祖:tuple
2016/05/08 Python
Python学习笔记之open()函数打开文件路径报错问题
2018/04/28 Python
解决python通过cx_Oracle模块连接Oracle乱码的问题
2018/10/18 Python
pandas修改DataFrame列名的实现方法
2019/02/22 Python
Ubuntu中配置TensorFlow使用环境的方法
2020/04/21 Python
python 决策树算法的实现
2020/10/09 Python
土耳其玩具商店:Toyzz Shop
2019/08/02 全球购物
Python里面search()和match()的区别
2016/09/21 面试题
物业保洁员岗位职责
2015/02/13 职场文书
2015年重阳节活动总结
2015/03/24 职场文书
给朋友的道歉短信
2015/05/12 职场文书
钢铁是怎样炼成的读书笔记
2015/06/29 职场文书
Nginx内网单机反向代理的实现
2021/11/07 Servers