前文提到了在Django中使用sqlite3,因为新项目的数据量会稍微比较大,且需要支持使用navicat做公网访问,故而采用mysql。
如何在Django中使用mysql的文章很多,这里就笔者自己遇到的坑做一些记录。
一、setting.py的修改:
修改databases----(主要是修改引擎Engine部分)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'qa_rds',
'USER': '',
'PASSWORD': '',
'HOST': '',
'PORT': '',
'OPTIONS': {
'autocommit': True,
}
}
}
二、修改init.py
import pymysql
pymysql.install_as_MySQLdb() #使用pymysql作为mysql数据库驱动
三、创建app
app的名字就是数据库的名字
指令如下:
python manage.py startapp [dbname]
这里遇到了第一个坑,报 django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3.
如果直接去尝试升级mysqlclient或者安装,就会掉坑里。
这时候需要找到python安装路径下的 django\db\backends\mysql\base.py
终端输入: echo $PYTHONPATH 找到python安装目录
如果是windows,到环境设置里找path值,查到python的安装目录,然后一层层往下找
再按后面的路径找到base.py文件
找到里面的一行判断mysqlclient版本并报错的语句:
if version < (1, 3, 3):
raise ImproperlyConfigured("mysqlclient 1.3.3 or newer is required; you have %s" % Database.__version__)
将这段代码进行注释,重新在项目目录终端中运行 python manage.py startapp [dbname]
命令运行没有报错,重新刷新一下项目目录,新生成的app目录就出现了。
编辑了models.py文件后,执行 python manage.py migrate 时,又会有新的报错内容:
AttributeError: 'str' object has no attribute 'decode'
顺着错误点进去,找到错误代码:query = query.decode(errors=‘replace’)
将decode修改为encode
重新执行,即可进行初始化