Django数据库配置避坑指南:从初始化到生产环境的实战优化
一、数据库配置
介绍
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从入门到实战》专栏!关注不迷路~
Django数据库配置避坑指南:从初始化到生产环境的实战优化的更多相关文章
- Android连接远程数据库的避坑指南
Android连接远程数据库的避坑指南 今天用Android Studio连接数据库时候,写了个测试连接的按钮,然后连接的时候报错了,报错信息: 2021-09-07 22:45:20.433 705 ...
- Canal v1.1.4版本避坑指南
前提 在忍耐了很久之后,忍不住爆发了,在掘金发了条沸点(下班时发的): 这是一个令人悲伤的故事,这条情感爆发的沸点好像被屏蔽了,另外小水渠(Canal意为水道.管道)上线一段时间,不出坑的时候风平浪静 ...
- CEF避坑指南(一)——下载并编译第一个示例
CEF即Chromium Embedded Framework,Chrome浏览器嵌入式框架.它提供了接口供程序员们把Chrome放到自己的程序中.许多大型公司,如网易.腾讯都开始使用CEF进行前端开 ...
- Linux下Python3.6的安装及避坑指南
Python3的安装 1.安装依赖环境 Python3在安装的过程中可能会用到各种依赖库,所以在正式安装Python3之前,需要将这些依赖库先行安装好. yum -y install zlib-dev ...
- Harmony OS 开发避坑指南——源码下载和编译
Harmony OS 开发避坑指南--源码下载和编译 本文介绍了如何下载鸿蒙系统源码,如何一次性配置可以编译三个目标平台(Hi3516,Hi3518和Hi3861)的编译环境,以及如何将源码编译为三个 ...
- electron 编译 sqlite3避坑指南---尾部链接有已经编译成功的sqlite3
electron 编译 sqlite3避坑指南(尾部链接有已经编译成功的sqlite3) sqlite很好用,不需要安装,使用electron开发桌面程序,sqlite自然是存储数据的不二之选,奈何编 ...
- [转帖]Kubernetes - nginx-ingress 配置跳坑指南
Kubernetes - nginx-ingress 配置跳坑指南 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https:// ...
- Hive改表结构的两个坑|避坑指南
Hive在大数据中可能是数据工程师使用的最多的组件,常见的数据仓库一般都是基于Hive搭建的,在使用Hive时候,遇到了两个奇怪的现象,今天给大家聊一下,以后遇到此类问题知道如何避坑! 坑一:改变字段 ...
- 今天 1024,为了不 996,Lombok 用起来以及避坑指南
Lombok简介.使用.工作原理.优缺点 Lombok 项目是一个 Java 库,它会自动插入编辑器和构建工具中,Lombok 提供了一组有用的注解,用来消除 Java 类中的大量样板代码. 目录 L ...
- .NET AsyncLocal 避坑指南
目录 AsyncLocal 用法简介 AsyncLocal 实现原理 AsyncLocal 的坑 AsyncLocal 的避坑指南 HttpContextAccessor 的实现原理 AsyncLoc ...
随机推荐
- 【Linux】3.2 vi和vim编辑器
vi 和 vim 三种模式的相互转化图 vim 和 vi 的快捷键键盘一览图 vi和vim编辑器 1. vi和vim的基本介绍 所有Linux系统都会内置vi文本编辑器 vim是vi的升级版,可以主动 ...
- GPFS并行文件系统部署实践
环境 ubuntu22.04 试用版下载链接 https://www.ibm.com/cn-zh/products/storage-scale 我的版本:Storage_Scale_Developer ...
- [笔记]关于JavaScript定时器如何清除和重启
定时器的清除和重启方法: // var t=setInterval(fun1,500) //fun1是你的函数 var fun1=function(){ //写入你的函数; } clearInterv ...
- 通过phpstudy设置域名/直接修改Apache、nginx配置后域名不生效的问题
使用虚拟主机或则云服务器的新萌可能会遇到这样的的问题,通过phpstudy解析域名或者直接修改Apache.nginx配置后域名并没有生效,一遍遍的检测配置文件,没毛病啊-(随便说下:Apache是h ...
- 9.30SDFZCSP-J模考总结
我是傻逼我是傻逼我是傻逼我是傻逼\Huge我是傻逼我是傻逼\\我是傻逼我是傻逼\\我是傻逼我是傻逼我是傻逼我是傻逼 T3数组开小痛失50pts!!!!!! 分数 T1 T2 T3 T4 总分 100p ...
- 在AI大爆发的背景下,企业管理软件有什么冲击
今天与同行开会提到在AI大爆发的背景下,未来企业管理软件究竟有什么冲击? 我和同事对此问题进行了探讨,一些拙见,与大家分享.先直接说观点:在未来的5到10年,制造业的管理软件市场将几乎消失.下面我来聊 ...
- 使用Linux筛选文本-日志分析
用于简单的文本筛选和日志分析还是很方便的. 我这里用的kali **目的:**筛选出test文件中 状态码为500的url 命令: cat test |grep '500' >test1 或 g ...
- Canon LBP2900安装Linux驱动的方法
Canon LBP2900使用Linux CAPT驱动,其最新版本是2017年3月的v2.71版,可从佳能中国官网下载.由于驱动包不提供install.sh安装脚本,某些依赖库需要检查后手动安装,具体 ...
- spring boot迁移计划 第Ⅰ章 --chapter 1. rust hyper 结合rust nacos-client开发nacos网关 part ② hyper网关
1. toml依赖 hyper = { version = "1", features = ["full"] } tokio = { version = &qu ...
- 凯亚物联网增加MQTT设备功能测试
一.前言 这几天一直在测试设备功能,并且搭建了线上流媒体推送,内存还比较稳定,.NET 8.0 性能不错,内存控制已经赶上了C++了,大家闲暇时间可以玩玩设备功能以及其它功能,过几天会发布测试版提供下 ...