1,guest/settings.py中加上

import pymysql
pymysql.install_as_MySQLdb()

 安装好pymysql

2,guest/settings.py的DATABASES设置参数如下,

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST' : '数据库ip',
'PORT' : '数据库端口',
'NAME': '数据库名称',
'USER' : 'msql用户名',
'PASSWORD' : 'mysql密码',
'OPTIONS' : {
'init_command' : "SET sql_mode='STRICT_TRANS_TABLES'",
}, }
}

3,出现问题清单

ImproperlyConfigured: mysqlclient 1.3.13 or newer is required
1、问题背景:
已经安装好了 pymysql,但是在命令行执行 python3 manage.py migrate 进行数据迁移时报如下错误:
(当然,你也可能是在执行其它操作时遇到类似错误)

......

File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/db/backends/mysql/base.py", line 36, in <module>
raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)
django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3.

根据最后两行的提示,mysqlclient 版本不够新,但是我已经都安装的最新版本了呀。

2、问题原因
虽然本地已安装了 PyMySQL 驱动,但 Django 连接 MySQL 时仍默认使用 MySQLdb 驱动,但 MySQLdb 并不支持 Python3,所以需要手动在项目中进行配置。

在项目根目录下的 __init__.py 文件中添加如下代码即可:

import pymysql
pymysql.install_as_MySQLdb()
1
2
再次执行命令时,还是会报错,没关系,仔细看下报错的倒数第三行,已经告诉你是在 base.py 第 36 行报的错,根据你的提示路径打开 base.py,把 35、36 行前面加 # 注释掉就好了,就像下面这样:

34 version = Database.version_info
35 #if version < (1, 3, 13):
36 # raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)

现在再次执行命令,上面的报错已经没有了,但是又有了新的错误,看下面怎么解决吧。

AttributeError: 'str' object has no attribute 'decode'
解决了上面的问题后,又遇到下面这个错误:

File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/db/backends/mysql/operations.py", line 146, in last_executed_query
query = query.decode(errors='replace')
AttributeError: 'str' object has no attribute 'decode'

提示属性错误:“str”对象没有属性“decode”。

问题的原因是,在 Python3 里:

str 通过 encode() 转换成 bytes
bytes 通过 decode() 转换成 str
也就是说:str 只有 encode() 方法,bytes 只有 decode() 方法!
这个估计是 django 的 bug 了。

解决方法:根据提示打开报错的文件 operations.py

找到 146 行,把 decode 改成 encode 即可,类似下面这样:
140 def last_executed_query(self, cursor, sql, params):
141 # With MySQLdb, cursor objects have an (undocumented) "_executed"
142 # attribute where the exact query sent to the database is saved.
143 # See MySQLdb/cursors.py in the source distribution.
144 query = getattr(cursor, '_executed', None)
145 if query is not None:
146 query = query.encode(errors='replace') # 这里把 decode 改为 encode
147 return query

此时,再次执行命令就不报错了,大功告成!

  

django设置mysql为数据库笔记的更多相关文章

  1. Django链接MySQL,数据库迁移

    form表单默认是以get请求提交数据的 http://127.0.0.1:8000/login/?username=admin&password=123 action 1 不写,默认向当前地 ...

  2. 在django中用MySQL为数据库 新建一个项目的流程

    创建mysql数据库 在cmd输入 mysql -uroot -p 启动mysql客户端并连接服务器 创建一个db_orm的数据库 mysql>CREATE DATABASE db_orm ch ...

  3. Django+Ajax+Mysql实现数据库数据的展示

    最近老师让搞一个系统,仅仅展示一下数据库的数据 在做海底捞时,是交接的师兄的项目,用的语言是java,框架是SSM(Spring.SpringMVC.MyBatis),这次我准备用Python写,前端 ...

  4. docker-compose设置mysql初始化数据库的字符集

    version: '3' services: mysql: image: mysql:5.7.24# volumes:# - ./mysqld.cnf:/etc/mysql/mysql.conf.d/ ...

  5. django中mysql数据库设置错误解决方法

    刚在django中settings.py进行设置mysql数据库. 当进行执行python manage.py shell命令时会报以下错误: 只需要在settings.py中 DATABASES = ...

  6. Django 连接 MySQL 数据库及常见报错解决

    目录 Django 连接 MySQL数据库及常见报错解决 终端或者数据库管理工具连接 MySQL ,并新建项目所需数据库 安装访问 MySQL 的 Python 模块 Django 相关配置 可能会遇 ...

  7. Django连接mysql数据库

    1.app中对应的models.py配置相关表结构信息 from django.db import models class Question(models.Model): question_text ...

  8. Django 连接mysql数据库中文乱码

    Django 连接mysql数据库中文乱码 2018年08月25日 20:55:15 可乐乐乐乐乐 阅读数:566   版本:CentOS6.8 python3.6.4 django1.8.2 数据库 ...

  9. Django中把SQLite数据库转换为Mysql数据库的配置方法

    我们在学习和开发Django的时候,一般是使用SQLite作为数据库.在正式讲网站部署上线是用MySQL数据库比较多.MySQL支持高并发的访问,而且相对于SQLite,MySQL性能更好.下面讲讲如 ...

随机推荐

  1. IANA

    IANA,全称The Internet Assigned Numbers Authority,即互联网数字分配机构1. Internet已成为全球范围的网络.为保证其正常运作,全球有很多机构参与进来. ...

  2. Newsgroups数据集研究

    1.数据集介绍 20newsgroups数据集是用于文本分类.文本挖据和信息检索研究的国际标准数据集之一. 数据集收集了大约20,000左右的新闻组文档,均匀分为20个不同主题的新闻组集合. 一些新闻 ...

  3. ubuntu1804 安装Nvidia驱动-nvidia-docker

    操作 看显卡 lspci | grep N 01:00.0 3D controller: NVIDIA Corporation GM107M [GeForce GTX 960M] (rev a2) 0 ...

  4. DOM添加

    ㈠添加元素的步骤 ⑴创建空元素 ⑵设置关键属性 ⑶将元素添加到DOM树   ㈡创建空元素 var elem = document.createElement('table');   示例: var t ...

  5. CSS样式,语法,添加方法,文本,字体

    总结一些css的基础知识 ㈠css样式 css:cascading style sheets  层叠样式表 css内容和样式相分离,便于修改样式. ㈡css语法 ㈢css添加方法 ⑴行内添加:放在&l ...

  6. jquery grid 显示隐藏列

    colModel: [ { label: '列名称', name: 'columnName', width: 100, align: 'left' } ] function showData() { ...

  7. POJ 1182食物链(并查集)

    食物链Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 85474 Accepted: 25549Description动物王国中有三 ...

  8. rm:删除文件或目录

    在使用 rm 命令删除文件或目录时,系统不会产生任何提示信息.此命令的基本格式为:rm[选项] 文件或目录 选项: -f:强制删除(force),和 -i 选项相反,使用 -f,系统将不再询问,而是直 ...

  9. Android 属性动画监听事件与一个菜单的例子

    简单监听事件 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 3 ...

  10. 工具类-ApplicationContextUtil

    package com.zhouyy.netBank.util; import org.springframework.beans.BeansException; import org.springf ...