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

简介: 本文介绍了Django数据库配置与初始化实战,涵盖MySQL等主流数据库的配置方法及常见问题处理。内容包括数据库连接设置、驱动安装、配置检查、数据表生成、初始数据导入导出,并提供真实项目部署场景的操作步骤与示例代码,适用于开发、测试及生产环境搭建。

一、数据库配置

介绍

Django 4.2 支持多种数据库后端

数据库类型 推荐版本 官方支持 驱动 / 后端 默认端口 适用场景 备注
PostgreSQL 12+ psycopg2-binary 5432 生产、开发、测试 支持高级字段类型(JSONField、ArrayField)
MySQL 5.7+(含 8.0) mysqlclientmysql-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 安装文档

二、数据库初始化

介绍

数据库初始化包括两部分

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

生成数据库表

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

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_systemmyapp_infra是两个Django的应用。

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

image-20250628172414919.png

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

导出数据

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

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

image-20250628165551352.png

  • 进入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 中,打开上述导出的文件。查看右下角,显示的编码格式。

image-20250628171709525.png

  • 点击右下角的这个编码格式——选择Save with Encoding——UTF-8

image-20250615152427726.png

加载数据

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

# 进入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

数据导入后效果:

image-20250630112735811.png

点击查看完整代码


您正在阅读的是《Django从入门到实战》专栏!关注不迷路~

相关文章
|
1月前
|
Oracle 关系型数据库 Linux
【赵渝强老师】Oracle数据库配置助手:DBCA
Oracle数据库配置助手(DBCA)是用于创建和配置Oracle数据库的工具,支持图形界面和静默执行模式。本文介绍了使用DBCA在Linux环境下创建数据库的完整步骤,包括选择数据库操作类型、配置存储与网络选项、设置管理密码等,并提供了界面截图与视频讲解,帮助用户快速掌握数据库创建流程。
254 93
|
5天前
|
SQL 关系型数据库 数据库
Python SQLAlchemy模块:从入门到实战的数据库操作指南
免费提供Python+PyCharm编程环境,结合SQLAlchemy ORM框架详解数据库开发。涵盖连接配置、模型定义、CRUD操作、事务控制及Alembic迁移工具,以电商订单系统为例,深入讲解高并发场景下的性能优化与最佳实践,助你高效构建数据驱动应用。
66 7
|
19天前
|
存储 人工智能 NoSQL
AI大模型应用实践 八:如何通过RAG数据库实现大模型的私有化定制与优化
RAG技术通过融合外部知识库与大模型,实现知识动态更新与私有化定制,解决大模型知识固化、幻觉及数据安全难题。本文详解RAG原理、数据库选型(向量库、图库、知识图谱、混合架构)及应用场景,助力企业高效构建安全、可解释的智能系统。
|
人工智能 关系型数据库 OLAP
聚光灯已就位!阿里云瑶池数据库邀你征战Cursor首届实战征文大赛
阿里云AnalyticDB携手Cursor中文社区,正式发起首届实战征文大赛!我们诚邀开发者融合Cursor的智能编程能力与AnalyticDB PostgreSQL提供的Supabase服务进行项目开发,让优秀项目被专家看见、被机遇拥抱!
|
3月前
|
监控 NoSQL 网络协议
Django 实时通信实战:WebSocket 与 ASGI 全解析(上)
WebSocket 是一种全双工通信协议,支持实时数据传输,适用于聊天、协作、监控等场景。ASGI 是异步 Web 标准,配合 Uvicorn 服务器和 Django Channels,可实现 Django 的 WebSocket 功能,提升实时应用性能。
194 0
|
26天前
|
SQL 存储 监控
SQL日志优化策略:提升数据库日志记录效率
通过以上方法结合起来运行调整方案, 可以显著地提升SQL环境下面向各种搜索引擎服务平台所需要满足标准条件下之数据库登记作业流程综合表现; 同时还能确保系统稳健运行并满越用户体验预期目标.
102 6
|
1月前
|
Ubuntu 安全 关系型数据库
安装与配置MySQL 8 on Ubuntu,包括权限授予、数据库备份及远程连接指南
以上步骤提供了在Ubuntu上从头开始设置、配置、授权、备份及恢复一个基础但完整的MySQL环境所需知识点。
313 7
|
1月前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
369 4
|
1月前
|
存储 数据库 开发者
Python SQLite模块:轻量级数据库的实战指南
本文深入讲解Python内置sqlite3模块的实战应用,涵盖数据库连接、CRUD操作、事务管理、性能优化及高级特性,结合完整案例,助你快速掌握SQLite在小型项目中的高效使用,是Python开发者必备的轻量级数据库指南。
187 0
|
3月前
|
人工智能 开发工具 数据库
Django实战:Python代码规范指南
PEP 8 是 Python 官方代码风格指南,提升代码可读性与团队协作效率。本文详解命名规范、注释写法、常用工具(如 Black、flake8)、编程实践与代码优化技巧,助力写出规范、易维护的 Python 代码。
190 7

热门文章

最新文章