首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Django数据库配置避坑指南:从初始化到生产环境的实战优化

Django数据库配置避坑指南:从初始化到生产环境的实战优化

原创
作者头像
小王子1024
发布2025-06-30 17:08:48
发布2025-06-30 17:08:48
25400
代码可运行
举报
运行总次数:0
代码可运行

一、数据库配置

介绍

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

实战示例:

代码语言:javascript
代码运行次数:0
运行
复制
### 数据库配置
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驱动

代码语言:javascript
代码运行次数:0
运行
复制
pip install mysqlclient

Linux生产环境安装mysqlclient驱动

代码语言:javascript
代码运行次数:0
运行
复制
# 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

配置检查

下面命令检查你的项目配置是否符合规范,包括数据库连接。如果数据库配置错误或无法连接,会提示相关错误。

代码语言:javascript
代码运行次数:0
运行
复制
# 进入Django项目根目录(即包含manage.py的目录)
python manage.py check --database default

排错指南

错误描述:启动Django项目时,提示如下

代码语言:javascript
代码运行次数:0
运行
复制
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 测试失败
代码语言:javascript
代码运行次数:0
运行
复制
pip show mysqlclient
pip install mysqlclient==2.2.0

参考资料:mysqlclient 安装文档

二、数据库初始化

介绍

数据库初始化包括两部分

  1. 生成数据库表
  2. 向数据库表添加初始数据

生成数据库表

根据模型定义生成数据库迁移文件

代码语言:javascript
代码运行次数:0
运行
复制
python manage.py makemigrations

执行数据库迁移,将迁移文件应用到数据库

代码语言:javascript
代码运行次数:0
运行
复制
python manage.py migrate

向数据库表添加初始数据

在 Django 中,Fixtures 允许你将数据库中的数据导出,或加载到数据库中,通常用于测试、初始化数据库或迁移数据。

导出命令

  • 在应用APP下 ,创建 fixtures 目录,执行下面命令。其中,myapp 替换为实际的Django APP名称
代码语言:javascript
代码运行次数:0
运行
复制
# 进入Django项目根目录(包含manage.py的目录)
python manage.py dumpdata myapp --indent=2 > myapp/fixtures/myapp.json

导入命令

代码语言:javascript
代码运行次数:0
运行
复制
# 进入Django项目根目录(包含manage.py的目录)
python manage.py loaddata myapp.json

参考资料:Django 辅助工具

三、数据库初始化实战

实战场景

在Django后台管理项目中,myapp_systemmyapp_infra是两个Django的应用。

  • 在项目开发时,向数据库添加了菜单、菜单权限、RBAC权限角色等初始化数据。如下图所示:

  • 在项目生产部署时,需要将上述初始数据导入到生产环境的数据库。

导出数据

在开发环境,导出数据库步骤:

  • 在应用APP下 ,创建 fixtures 目录。myapp_systemmyapp_infra是两个Django的应用,分别在其下创建 fixtures目录

  • 进入Django项目根目录(包含manage.py的目录),执行下面命令
代码语言:javascript
代码运行次数:0
运行
复制
# 分别导出`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

加载数据

项目生产部署时,向数据库导入初始数据

代码语言:javascript
代码运行次数:0
运行
复制
# 进入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从入门到实战》专栏!关注不迷路~

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、数据库配置
    • 介绍
    • 配置MySQL数据库
    • 安装MySQL驱动
    • 配置检查
    • 排错指南
  • 二、数据库初始化
    • 介绍
    • 生成数据库表
    • 向数据库表添加初始数据
  • 三、数据库初始化实战
    • 实战场景
    • 导出数据
    • 加载数据
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档