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的Django框架实现事务交易管理的教程
Apr 20 Python
在Python中使用mongoengine操作MongoDB教程
Apr 24 Python
Python获取SQLite查询结果表列名的方法
Jun 21 Python
详解flask表单提交的两种方式
Jul 21 Python
纯用NumPy实现神经网络的示例代码
Oct 24 Python
在自动化中用python实现键盘操作的方法详解
Jul 19 Python
python创建与遍历List二维列表的方法
Aug 16 Python
python语言线程标准库threading.local解读总结
Nov 10 Python
python实现银行实战系统
Feb 26 Python
使用 Python 遍历目录树的方法
Feb 29 Python
python异常处理、自定义异常、断言原理与用法分析
Mar 23 Python
关于探究python中sys.argv时遇到的问题详解
Feb 23 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
echo(),print(),print_r()之间的区别?
2006/11/19 PHP
php中0,null,empty,空,false,字符串关系的详细介绍
2013/06/20 PHP
session在php5.3中的变化 session_is_registered() is deprecated in
2013/11/12 PHP
打印json对象的内容及JSON.stringify函数应用
2013/03/29 Javascript
教你如何在 Javascript 文件里使用 .Net MVC Razor 语法
2014/07/23 Javascript
js使用正则实现ReplaceAll全部替换的方法
2014/08/22 Javascript
JavaScript实现Iterator模式实例分析
2015/06/09 Javascript
javascript实现禁止复制网页内容汇总
2015/12/30 Javascript
javascript中加var和不加var的区别 你真的懂吗
2016/01/06 Javascript
AngularJS教程之环境设置
2016/08/16 Javascript
JavaScript学习笔记整理_用于模式匹配的String方法
2016/09/19 Javascript
javascript内存分配原理实例分析
2017/04/10 Javascript
vue子组件使用自定义事件向父组件传递数据
2017/05/27 Javascript
webpack开发跨域问题解决办法
2017/08/03 Javascript
Vue用v-for给src属性赋值的方法
2018/03/03 Javascript
JavaScript实现多态和继承的封装操作示例
2018/08/20 Javascript
vue中,在本地缓存中读写数据的方法
2018/09/21 Javascript
使用webpack构建应用的方法步骤
2019/03/04 Javascript
[01:03:54]Liquid vs IG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
新手该如何学python怎么学好python?
2008/10/07 Python
Python设计模式之观察者模式实例
2014/04/26 Python
Python WXPY实现微信监控报警功能的代码
2017/10/20 Python
python sys,os,time模块的使用(包括时间格式的各种转换)
2018/04/27 Python
Django框架 Pagination分页实现代码实例
2019/09/04 Python
Python模拟登录之滑块验证码的破解(实例代码)
2019/11/18 Python
python——全排列数的生成方式
2020/02/26 Python
美国婚礼和派对礼品网站:Kate Aspen(新娘送礼会、迎婴派对)
2018/03/28 全球购物
总经理职责范文
2013/11/08 职场文书
品管员岗位职责
2013/11/10 职场文书
2014年依法行政工作总结
2014/11/19 职场文书
2015年党员个人自我评价
2015/03/03 职场文书
通知函的格式
2015/04/27 职场文书
解决vue $http的get和post请求跨域问题
2021/06/07 Vue.js
ORACLE查看当前账号的相关信息
2021/06/18 Oracle
吉利入股戴姆勒后smart“长大了”
2022/04/21 数码科技
tomcat下部署jenkins的方法
2022/05/06 Servers