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调用Moxa PCOMM Lite通过串口Ymodem协议实现发送文件
Aug 15 Python
Python2.x版本中cmp()方法的使用教程
May 14 Python
Python读写txt文本文件的操作方法全解析
Jun 26 Python
关于Django ForeignKey 反向查询中filter和_set的效率对比详解
Dec 15 Python
使用Python刷淘宝喵币(低阶入门版)
Oct 30 Python
Pytorch基本变量类型FloatTensor与Variable用法
Jan 08 Python
Django models filter筛选条件详解
Mar 16 Python
python 抓取知乎指定回答下视频的方法
Jul 09 Python
使用Python将语音转换为文本的方法
Aug 10 Python
Python内置函数及功能简介汇总
Oct 13 Python
使用AJAX和Django获取数据的方法实例
Oct 25 Python
使用python如何删除同一文件夹下相似的图片
May 07 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
PHP 中检查或过滤IP地址的实现代码
2011/11/27 PHP
php操作JSON格式数据的实现代码
2011/12/24 PHP
linux下实现定时执行php脚本
2015/02/13 PHP
浅析PHP 中move_uploaded_file 上传中文文件名失败
2019/04/17 PHP
js substr支持中文截取函数代码(中文是双字节)
2013/04/17 Javascript
js检查页面上有无重复id的实现代码
2013/07/17 Javascript
JavaScript 开发工具webstrom使用指南
2014/12/09 Javascript
动态加载js的方法汇总
2015/02/13 Javascript
javascript结合Canvas 实现简易的圆形时钟
2015/03/11 Javascript
Javascript中判断对象是否为空
2015/06/10 Javascript
javascript三种代码注释方法
2016/06/02 Javascript
AngularJS入门教程之 XMLHttpRequest实例讲解
2016/07/27 Javascript
DOM操作原生js 的bug,使用jQuery 可以消除的解决方法
2016/09/04 Javascript
AngularJS打开页面隐藏显示表达式用法示例
2016/12/25 Javascript
vue日期组件 支持vue1.0和2.0
2017/01/09 Javascript
jquery.validate表单验证插件使用详解
2017/06/21 jQuery
微信小程序radio组件使用详解
2018/01/31 Javascript
超出JavaScript安全整数限制的数字计算BigInt详解
2018/06/24 Javascript
Vue CLI 2.x搭建vue(目录最全分析)
2019/02/27 Javascript
JS使用百度地图API自动获取地址和经纬度操作示例
2019/04/16 Javascript
vue组件之间的数据传递方法详解
2019/04/19 Javascript
利用JS响应式修改vue实现页面的input值
2019/09/02 Javascript
JavaScript交换两个变量方法实例
2019/11/25 Javascript
Nodejs 数组的队列以及forEach的应用详解
2021/02/25 NodeJs
[00:32]2018DOTA2亚洲邀请赛出场——LGD
2018/04/04 DOTA
Python下的常用下载安装工具pip的安装方法
2015/11/13 Python
浅谈django中的认证与登录
2016/10/31 Python
python3 中文乱码与默认编码格式设定方法
2018/10/31 Python
详解Python的三种可变参数
2019/05/08 Python
如何在django中实现分页功能
2020/04/22 Python
html5 Canvas绘制线条 closePath()实例代码
2012/05/10 HTML / CSS
JAVA的事件委托机制和垃圾回收机制
2014/09/07 面试题
《维生素c的故事》教学反思
2014/02/18 职场文书
大学运动会入场词
2014/02/22 职场文书
律师催款函范文
2015/06/24 职场文书
用position:sticky完美解决小程序吸顶问题的实现方法
2021/04/24 HTML / CSS