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 ...
随机推荐
- Visual Studio 2017 导出 ASP.NET Core 项目模版项目文件为空
问题重现 VS 2017 针对 ASP.NET Core 导出模版功能有问题 解决办法 visual-studio-2017-templates-and-the-missing-content 目前官 ...
- 二叉树专题学习(C++版) 基础的上机题
前言: 由于二叉树这一章的题型比较多,涉及到的递归程序也较多,所以单开一个随笔来记录这个学习过程,希望对读者有帮助. 理论知识基础 在二叉树的选择题中,常常会涉及到对于最多或最少结点.最大或最小高度. ...
- 麒麟V10部署ROCEv2网卡配置步骤
以下是为麒麟服务器版V10配置RoCEv2的步骤: 第一步:确认硬件和驱动支持 在开始配置之前,首先要确保你的服务器硬件满足要求.通常需要Mellanox ConnectX系列网卡(例如mlx5系列) ...
- python调用QQ机器人向指定QQ发消息
暂时没想到这个能用来干什么,只是刚好看到相关文章,学习一下,就拿获取基金信息来做试验把 爬取基金的信息就不介绍了,请参考https://www.cnblogs.com/becks/p/14500495 ...
- Streamlit快速入门指南
theme: orange Streamlit是一个Python库,允许您创建交互式的数据科学和机器学习Web应用程序. Streamlit介绍 Streamlit是一个Python库,允许您创建交互 ...
- K8s Pod 控制器介绍及应用示例
Kubernetes 官方文档:Pod 控制器 Pod控制器介绍 Pod是kubernetes的最小管理单元,在kubernetes中,按照pod的创建方式可以将其分为两类: 自主式pod:kuber ...
- 关于 IFreeSql 注入,与 AspectCore 冲突的说明
FreeSql 以 MIT 开源协议托管于 github:https://github.com/2881099/FreeSql IFreeSql 作为 ORM 顶级对象,没有设置 NameSpace( ...
- tar命令打包指定目录及其文件,而不包括其上级目录
想指定将/var目录下的log目录及其文件打包到当前目录,在压缩包解压时不包括/var目录,可使用如下方式: tar -zcvf log_bak.tar.gz -C /var/ log # 注意log ...
- 在postman中为每个测试用例添加相同的请求头
最近在学习的时候看到可以在postman中可以为每个测试用例添加相同的请求头,这个就不用单独去设置了,可以说是非常好用,遂记录一下. 具体设置如下: https://postman.org.cn/
- 使用Ollama本地化部署DeepSeek
1.Ollama 简介 Ollama 是一个开源的本地化大模型部署工具,旨在简化大型语言模型(LLM)的安装.运行和管理.它支持多种模型架构,并提供与 OpenAI 兼容的 API 接口,适合开发者和 ...