django版本:2.0.4
mysql版本:5.7.22-0ubuntu0.16.04.1
pymysql版本:0.8.1

django连接MySQL数据库过程如下:

首先安装PyMySQL: pip install pymysql

然后在APP下的_init_.py文件下,输入

1
2
import pymysql
pymysql.install_as_MySQLdb()

说明:_init_.py文件是一个空文件,因为Django连接MySQL时默认使用MySQLdb驱动,但MySQLdb不支持Python3,因此这里将MySQL驱动设置为pymysql。

然后在setting.py文件中,将DATABASES内容修改为:

1
2
3
4
5
6
7
8
9
10
11
12
DATABASES = {
'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
'ENGINE': 'django.db.backends.mysql',
'NAME': 'test', # 使用的数据库名字
'USER': 'root', # django数据库使用者
'PASSWORD': 'password', # 连接数据库密码
'HOST': '127.0.0.1',
'POST': '3306',
}
}

最后生成迁移文件: python manage.py makemigrations

报错信息:

django.db.utils.OperationalError: (1045, “Access denied for user ‘root’@’localhost’ (using password: YES)”)

确定自己输入的NAME, USER, PASSWORD是正确的,如果还是出现上面的报错,参考下面的解决方法

解决方法:

1
2
3
4
5
6
7
8
9
10
# 进入mysql
mysql -u root -p

# 进入项目使用的数据库
use test

# 运行下面命令
grant usage on *.* to root@localhost identified by 'password'; # password是进入MySQL设置的密码
GRANT all privileges on DBNAME.* to 'root'@'localhost' IDENTIFIED BY 'root' WITH GRANT OPTION;
FLUSH PRIVILEGES;

解决方法来自:
https://stackoverflow.com/questions/17425523/python-mysql-operationalerror-1045-access-denied-for-user-rootlocalhost
https://blog.csdn.net/imilano/article/details/79545324

重新生成迁移文件: python manage.py makemigrations
应用数据库迁移: python manage.py migrate

完成。