文章目录
一、数据库配置
介绍
Django 4.2 支持多种数据库后端
数据库类型 | 推荐版本 | 官方支持 | 驱动 / 后端 | 默认端口 | 适用场景 | 备注 |
---|---|---|---|---|---|---|
PostgreSQL | 12+ | ✅ | psycopg2-binary |
5432 | 生产、开发、测试 | 支持高级字段类型(JSONField、ArrayField) |
MySQL | 5.7+(含 8.0) | ✅ | mysqlclient 或 mysql-connector-python |
3306 | 生产、开发 | 严格模式默认启用 |
SQLite | 3.35+ | ✅ | 内置(无需额外驱动) | 无需端口 | 开发、测试 | 轻量级,不适合高并发生产环境 |
Oracle | 12.2+ | ✅ | cx_Oracle |
1521 | 企业级应用 | 配置较复杂,需额外依赖 |
Microsoft SQL Server | 2017+ | ❌ | django-pyodbc-azure |
1433 | 企业级应用 | 第三方后端支持 |
Firebird | 3.0+ | ❌ | django-firebird |
3050 | legacy 系统 | 第三方后端支持 |
TimescaleDB | 2.0+ | ❌ | 基于 PostgreSQL | 5432 | 时间序列数据 | 需额外配置 |
配置MySQL数据库
Django项目配置文件:mysite\mysite\settings.py
实战示例:
### 数据库配置
DATABASE_HOST = "127.0.0.1" # 数据库地址
DATABASE_PORT = "3306" # 数据库端口
DATABASES = {
"default": {
"ENGINE": "django.db.backends.mysql",
"NAME": "mars-mgn",
"USER": "root",
"PASSWORD": "@d9Kf2!x",
"HOST": DATABASE_HOST,
"PORT": DATABASE_PORT,
"OPTIONS": {"init_command": "SET time_zone='+08:00'"},
}
}
安装MySQL驱动
推荐使用mysqlclient
驱动。
Windows开发环境安装mysqlclient
驱动
pip install mysqlclient
Linux生产环境安装mysqlclient
驱动
# Debian / Ubuntu操作系统:
apt update
apt install python3-dev default-libmysqlclient-dev build-essential pkg-config
pip install mysqlclient
# Red Hat / CentOS操作系统:
sudo yum install python3-devel mysql-devel pkgconfig
pip install mysqlclient
配置检查
下面命令检查你的项目配置是否符合规范,包括数据库连接。如果数据库配置错误或无法连接,会提示相关错误。
# 进入Django项目根目录(即包含manage.py的目录)
python manage.py check --database default
排错指南
错误描述:启动Django项目时,提示如下
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.
Did you install mysqlclient?
解决方法:尝试降低或升级mysqlclient版本。例如从2.2.4版本,降低到2.2.0版本。
- ubuntu22.04 + python3.9.20 + Django4.2.7 + mysqlclient2.2.0 测试成功
- ubuntu22.04 + python3.9.20 + Django4.2.7 + mysqlclient2.2.4 测试失败
pip show mysqlclient
pip install mysqlclient==2.2.0
参考资料:mysqlclient 安装文档
二、数据库初始化
介绍
数据库初始化包括两部分
- 生成数据库表
- 向数据库表添加初始数据
生成数据库表
根据模型定义生成数据库迁移文件
python manage.py makemigrations
执行数据库迁移,将迁移文件应用到数据库
python manage.py migrate
向数据库表添加初始数据
在 Django 中,Fixtures 允许你将数据库中的数据导出,或加载到数据库中,通常用于测试、初始化数据库或迁移数据。
导出命令
- 在应用APP下 ,创建
fixtures
目录,执行下面命令。其中,myapp 替换为实际的Django APP名称
# 进入Django项目根目录(包含manage.py的目录)
python manage.py dumpdata myapp --indent=2 > myapp/fixtures/myapp.json
导入命令
# 进入Django项目根目录(包含manage.py的目录)
python manage.py loaddata myapp.json
参考资料:Django 辅助工具
三、数据库初始化实战
实战场景
在Django后台管理项目中,myapp_system
和myapp_infra
是两个Django的应用。
- 在项目开发时,向数据库添加了菜单、菜单权限、RBAC权限角色等初始化数据。如下图所示:
- 在项目生产部署时,需要将上述初始数据导入到生产环境的数据库。
导出数据
在开发环境,导出数据库步骤:
- 在应用APP下 ,创建
fixtures
目录。myapp_system
和myapp_infra
是两个Django的应用,分别在其下创建fixtures
目录
- 进入Django项目根目录(包含manage.py的目录),执行下面命令
# 分别导出`myapp_system`和`myapp_infra`是两个Django的应用的初始数据
python manage.py dumpdata myapp_system --indent=2 > myapp_system/fixtures/myapp_system.json
python manage.py dumpdata myapp_infra --indent=2 > myapp_infra/fixtures/myapp_infra.json
# 导出有集成其它第三方APP的初始数据
python manage.py dumpdata django_celery_beat --indent=2 > myapp_infra/fixtures/django_celery_beat.json
python manage.py dumpdata django_celery_results --indent=2 > myapp_infra/fixtures/django_celery_results.json
- 转换格式:上述导出的文件格如果是
UTF-16 LE
编码,需要手动转换为UTF-8
编码。
格式转换步骤:
- 在 VS Code 中,打开上述导出的文件。查看右下角,显示的编码格式。
- 点击右下角的这个编码格式——选择
Save with Encoding
——UTF-8
加载数据
项目生产部署时,向数据库导入初始数据
# 进入Django项目根目录(包含manage.py的目录),执行下面命令
# Django 会在每个安装的应用程序的 `fixtures` 目录中搜索
python manage.py loaddata myapp_system.json myapp_infra.json
python manage.py loaddata django_celery_beat.json django_celery_results.json
数据导入后效果:
您正在阅读的是《Django从入门到实战》专栏!关注不迷路~