Django接入MySQL核心三步:手动建库、安装mysqlclient驱动、配置settings.py中DATABASES;ORM不建库,需先用CREATE DATABASE创建,且须用utf8mb4编码,再授权专用用户,最后验证dbshell连接成功方可迁移。

直接用 Django 接入 MySQL,核心就三件事:手动建库、装驱动、改 settings.py。ORM 不会帮你创建数据库,这一步漏掉,后续所有命令都会报 OperationalError: (1049, "Unknown database 'xxx'")。
手动创建 MySQL 数据库(必须先做)
这是最容易卡住的一步——manage.py migrate 从不建库,只建表。你得先用 MySQL 客户端执行:
CREATE DATABASE myproject DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;
注意两点:
-
utf8mb4是必须的,utf8在 MySQL 里实际是阉割版,不支持 emoji 和部分四字节 Unicode - 别用
root用户跑 Django 应用,生产环境应单独建用户并授权:GRANT ALL PRIVILEGES ON myproject.* TO 'myuser'@'localhost' IDENTIFIED BY 'mypass';
选对驱动:mysqlclient 还是 pymysql?
官方推荐且性能更稳的是 mysqlclient,不是 pymysql。虽然 pymysql 纯 Python、安装快,但它在并发高或长连接场景下容易触发 MySQL server has gone away 错误。
立即学习“Python免费学习笔记(深入)”;
装 mysqlclient 常见失败原因和解法:
- Mac 报
mysql_config not found:先装brew install mysql-client,再运行export PATH="/opt/homebrew/opt/mysql-client/bin:$PATH",然后pip install mysqlclient - Ubuntu/Debian 缺头文件:运行
sudo apt-get install python3-dev default-libmysqlclient-dev build-essential - Windows 下建议用预编译 wheel:
pip install --only-binary=all mysqlclient
如果坚持用 pymysql,必须在项目根目录的 __init__.py 里加两行:
python-docx Skill功能概述python-docx Skill是一项面向实际任务的技能,主要用于本Skill提供使用python-docx生成专业Word文档的标准方法和最佳实践;生成安全服务方案文档;核心要点生成技术架构设计文档;生成任何需要专业排版的Word文档;核心库 : python-docx;使用与执行辅助库 : docx.shared , docx.enum , docx.oxml.ns;标准代码模板;1. 文档初始化;2. 字体设置(必须!它将相关步骤、工具调用和结果整理方式集
import pymysql<br>pymysql.install_as_MySQLdb()
settings.py 的 ENGINE 和 OPTIONS 配置要点
ENGINE 必须写成 'django.db.backends.mysql',少一个点或大小写错都会导致 ImproperlyConfigured。
真实项目中建议加 OPTIONS 控制底层行为:
- 禁用外键检查(仅开发期临时用):
"init_command": "SET foreign_key_checks = 0;" - 显式指定时区避免
datetime混乱:"init_command": "SET time_zone = '+00:00';" - 强制 UTF-8 通信:
"charset": "utf8mb4"
完整示例:
DATABASES = {<br> 'default': {<br> 'ENGINE': 'django.db.backends.mysql',<br> 'NAME': 'myproject',<br> 'USER': 'myuser',<br> 'PASSWORD': 'mypass',<br> 'HOST': '127.0.0.1',<br> 'PORT': 3306,<br> 'OPTIONS': {<br> 'charset': 'utf8mb4',<br> 'init_command': "SET time_zone = '+00:00';"<br> }<br> }<br>}第一次迁移前务必验证连接
别急着跑 makemigrations。先在 shell 里试连:
python manage.py dbshell
如果直接报错或卡住,说明配置有误;能进 MySQL 提示符,再退出来执行:
python manage.py showmigrations
若提示 No migrations to apply,说明 ORM 已识别数据库,可以安全执行:
python manage.py makemigrations && python manage.py migrate
这里有个隐性坑:如果你之前用过 SQLite,migrations 文件夹里可能残留旧的迁移记录,导致 migrate 报 Migration xxx is applied but not in database。此时要清空 migrations 目录(保留空 __init__.py),再重来。

















