Django 连接 MySQL 全流程
Django 连接 MySQL 全流程踩坑实录
开发环境把 Django 默认的 SQLite,但我们经常用的是mysql数据库,如何 换成 MySQL 呢?今天我们就来看一下
一、在 MySQL 里建库
# 终端 1:连本地 MySQL
mysql -uroot -p
mysql> CREATE DATABASE work_42_01
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
mysql> USE work_42_01;
mysql> exit;
库名随意,但字符集务必用 utf8mb4
,否则中文会炸。
这里就不多说了,熟悉mysql的都会
二、修改 Django 配置
修改settings.py文件
# bookmanager02/settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'work_42_01',
'USER': 'root',
'PASSWORD': 'mysql', # 你的 root 密码
'HOST': '127.0.0.1',
'PORT': 3306,
}
}
改完一定要 Ctrl+S
保存,再跑 python manage.py runserver
做“冒烟测试”。
三、安装 MySQL 驱动
方案 A:mysqlclient(官方推荐,性能最好)
# 确保在虚拟环境里
pip install mysqlclient
- Linux 报缺
mysql_config
sudo apt-get install libmysqlclient-dev # Ubuntu/Debian
# 或
sudo yum install mysql-devel # CentOS/RHEL
- macOS 报缺
mysql.h
brew install mysql-client
export PATH="/opt/homebrew/opt/mysql-client/bin:$PATH"
pip install mysqlclient
方案 B:PyMySQL(纯 Python,装不上 A 再用)
pip install pymysql
然后在项目根目录的 __init__.py
追加两行:
import pymysql
pymysql.install_as_MySQLdb()
-
把纯 Python 写的 MySQL 驱动
pymysql
引进来。 -
把
pymysql
伪装成MySQLdb
,让 Django 以为它调的是传统的MySQLdb
,其实底层走的是pymysql
,从而在不改任何 Django 源码的情况下,成功连上 MySQL。
四、验证是否成功
python manage.py runserver
-
成功:浏览器打开
127.0.0.1:8000
无报错。 -
失败:看报错关键词,对照下表秒修。
五、常见报错速查表
|报错信息|原因|一键修复| |-|-|-| |Did you install mysqlclient?
|没装驱动|见“三”| |mysql_config not found
|系统缺开发头文件|Ubuntu: apt-get install libmysqlclient-dev
| |Access denied for user 'root'@'localhost'
|密码写错|重新 mysql -uroot -p
验证| |Unknown database 'work_42_01'
|库没建|回到“一”执行建库语句| |No module named 'MySQLdb'
|PyMySQL 没装或未 install_as_MySQLdb()
|方案 B 完整照抄|
六、一键回滚脚本(可选)
# 若搞砸了,快速回到 SQLite
cp settings.py.sqlite3 settings.py # 提前备份
七、课后一句话
装好驱动、能跑 runserver
后,立刻 git commit -m "chore: switch to MySQL"
,明天直接写模型,不再折腾环境!
- 点赞
- 收藏
- 关注作者
评论(0)