在python3环境下,使用Django链接mysql,在settings.py中配置好各个设置项后执行python manage.py migrate
,出现了以下错误:
1.
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named 'MySQLdb',
主要是python2使用mysqldb,python3使用pymysql,所以在使用pymysql时就有问题了,解决:
在init.py中写
import pymysql
pymysql.install_as_MySQLdb()
重新执行python manage.py migrate
,又有错:
django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required;
you have 0.9.3.
虽然版本最新,但还是报错,解决:在异常传播途径的最后一条点进去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__)
37
重新执行python manage.py migrate
,又有错:
3.
django.db.utils.OperationalError: (1045, "Access denied for user
'root'@'localhost' (using password: NO)"),
很神奇的错误,在overstackflow上看到一个解决办法:地址
但是该方法不适用我的错误,因为在数据库中执行:show grants for 'root'@'localhost'\G;
,可以看到我已经设置过了,最后在settings.py的databases上面的注释中打开了官方文档,发现人家所有的key都是大写的,我的配置中出现了小写,这个有影响??改成大写,还真有。
重新执行python manage.py migrate
,还是有错:
4.
AttributeError: 'str' object has no attribute 'decode',
打开异常传播的最后一个文件operations.py
,将144行开始的decode换成encode
query = getattr(cursor, '_executed', None)
if query is not None:
query = query.decode(errors='replace') ----》encode
return query
执行完成
以上问题的解决参考了很多资料,这里不一一列举,感谢分享