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的Bottle框架的一些使用技巧介绍
Apr 08 Python
python+matplotlib绘制简单的海豚(顶点和节点的操作)
Jan 02 Python
python 执行shell命令并将结果保存的实例
May 11 Python
浅谈django三种缓存模式的使用及注意点
Sep 30 Python
Python基本数据结构与用法详解【列表、元组、集合、字典】
Mar 23 Python
python输出带颜色字体实例方法
Sep 01 Python
django drf框架自带的路由及最简化的视图
Sep 10 Python
大家都说好用的Python命令行库click的使用
Nov 07 Python
Django crontab定时任务模块操作方法解析
Sep 10 Python
Python中使用Selenium环境安装的方法步骤
Feb 22 Python
浅谈pytorch中的dropout的概率p
May 27 Python
Python开发简易五子棋小游戏
May 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
很实用的一个完整email发送程序
2006/10/09 PHP
深入浅析yii2-gii自定义模板的方法
2016/04/26 PHP
PHP连续签到功能实现方法详解
2019/12/04 PHP
70+漂亮且极具亲和力的导航菜单设计国外网站推荐
2011/09/20 Javascript
jquery显示和隐藏div特效实例
2013/02/27 Javascript
js动态生成指定行数的表格
2013/07/11 Javascript
javascript设置连续两次点击按钮时间间隔的方法
2014/10/28 Javascript
javascript中Object使用详解
2015/01/26 Javascript
JQuery给网页更换皮肤的方法
2015/05/30 Javascript
jQuery+PHP+MySQL二级联动下拉菜单实例讲解
2015/10/27 Javascript
小白谈谈对JS原型链的理解
2016/05/03 Javascript
实例讲解JavaScript的Backbone.js框架中的View视图
2016/05/05 Javascript
有关JavaScript中call()和apply() 的一些理解
2016/05/20 Javascript
JS库particles.js创建超炫背景粒子插件(附源码下载)
2017/09/13 Javascript
微信小程序 input表单与redio及下拉列表的使用实例
2017/09/20 Javascript
Nodejs中的JWT和Session的使用
2018/08/21 NodeJs
vue实现配置全局访问路径头(axios)
2019/11/01 Javascript
Windows下安装 node 的版本控制工具 nvm
2020/02/06 Javascript
[01:38]【DOTA2亚洲邀请赛】Sumail——梦开始的地方
2017/03/03 DOTA
[03:30]DOTA2完美“圣”典精彩集锦
2016/12/27 DOTA
[00:47]TI7不朽珍藏III——沙王不朽展示
2017/07/15 DOTA
[00:38]TI珍贵瞬间系列(二):笑
2020/08/26 DOTA
Python脚本实现DNSPod DNS动态解析域名
2015/02/14 Python
python使用wxPython打开并播放wav文件的方法
2015/04/24 Python
在python中用url_for构造URL的方法
2019/07/25 Python
使用python求斐波那契数列中第n个数的值示例代码
2020/07/26 Python
纯HTML5+CSS3制作生日蛋糕代码
2016/11/16 HTML / CSS
Currentbody西班牙:美容仪专家
2019/09/28 全球购物
Genny意大利官网:意大利高级时装品牌
2020/04/15 全球购物
Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型
2013/10/30 面试题
电子信息科学专业自荐信
2014/01/30 职场文书
消防安全汇报材料
2014/02/08 职场文书
《尊严》教学反思
2014/02/11 职场文书
药剂专业求职信
2014/06/20 职场文书
五四演讲稿范文
2014/09/03 职场文书
法定代表人授权委托书范文
2014/09/22 职场文书