找回密码
 立即注册
首页 业界区 业界 Django数据库配置避坑指南:从初始化到生产环境的实战优 ...

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

秤陷曲 2025-6-30 15:21:21
一、数据库配置

介绍

Django 4.2 支持多种数据库后端
数据库类型推荐版本官方支持驱动 / 后端默认端口适用场景备注PostgreSQL12+✅psycopg2-binary5432生产、开发、测试支持高级字段类型(JSONField、ArrayField)MySQL5.7+(含 8.0)✅mysqlclient 或 mysql-connector-python3306生产、开发严格模式默认启用SQLite3.35+✅内置(无需额外驱动)无需端口开发、测试轻量级,不适合高并发生产环境Oracle12.2+✅cx_Oracle1521企业级应用配置较复杂,需额外依赖Microsoft SQL Server2017+❌django-pyodbc-azure1433企业级应用第三方后端支持Firebird3.0+❌django-firebird3050legacy 系统第三方后端支持TimescaleDB2.0+❌基于 PostgreSQL5432时间序列数据需额外配置配置MySQL数据库

Django项目配置文件:mysite\mysite\settings.py
实战示例:
  1. ### 数据库配置
  2. DATABASE_HOST = "127.0.0.1"  # 数据库地址
  3. DATABASE_PORT = "3306"  # 数据库端口
  4. DATABASES = {
  5.     "default": {
  6.         "ENGINE": "django.db.backends.mysql",
  7.         "NAME": "mars-mgn",
  8.         "USER": "root",
  9.         "PASSWORD": "@d9Kf2!x",
  10.         "HOST": DATABASE_HOST,
  11.         "PORT": DATABASE_PORT,
  12.         "OPTIONS": {"init_command": "SET time_zone='+08:00'"},
  13.     }
  14. }
复制代码
安装MySQL驱动

推荐使用mysqlclient驱动。
Windows开发环境安装mysqlclient驱动
  1. pip install mysqlclient
复制代码
Linux生产环境安装mysqlclient驱动
  1. # Debian / Ubuntu操作系统:
  2. apt update
  3. apt install python3-dev default-libmysqlclient-dev build-essential pkg-config
  4. pip install mysqlclient
  5. # Red Hat / CentOS操作系统:
  6. sudo yum install python3-devel mysql-devel pkgconfig
  7. pip install mysqlclient
复制代码
配置检查

下面命令检查你的项目配置是否符合规范,包括数据库连接。如果数据库配置错误或无法连接,会提示相关错误。
  1. # 进入Django项目根目录(即包含manage.py的目录)
  2. python manage.py check --database default
复制代码
排错指南

错误描述:启动Django项目时,提示如下
  1. django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.
  2. 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 测试失败
  1. pip show mysqlclient
  2. pip install mysqlclient==2.2.0
复制代码
参考资料:mysqlclient 安装文档
二、数据库初始化

介绍

数据库初始化包括两部分

  • 生成数据库表
  • 向数据库表添加初始数据
生成数据库表

根据模型定义生成数据库迁移文件
  1. python manage.py makemigrations
复制代码
执行数据库迁移,将迁移文件应用到数据库
  1. python manage.py migrate
复制代码
向数据库表添加初始数据

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

  • 在应用APP下 ,创建 fixtures 目录,执行下面命令。其中,myapp 替换为实际的Django APP名称
  1. # 进入Django项目根目录(包含manage.py的目录)
  2. python manage.py dumpdata myapp --indent=2 > myapp/fixtures/myapp.json
复制代码
导入命令
  1. # 进入Django项目根目录(包含manage.py的目录)
  2. python manage.py loaddata myapp.json
复制代码
参考资料:Django 辅助工具
三、数据库初始化实战

实战场景

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

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


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

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

  • 在应用APP下 ,创建 fixtures 目录。myapp_system和myapp_infra是两个Django的应用,分别在其下创建 fixtures目录
2.png


  • 进入Django项目根目录(包含manage.py的目录),执行下面命令
  1. # 分别导出`myapp_system`和`myapp_infra`是两个Django的应用的初始数据
  2. python manage.py dumpdata myapp_system --indent=2 > myapp_system/fixtures/myapp_system.json
  3. python manage.py dumpdata myapp_infra --indent=2 > myapp_infra/fixtures/myapp_infra.json
  4. # 导出有集成其它第三方APP的初始数据
  5. python manage.py dumpdata django_celery_beat --indent=2 > myapp_infra/fixtures/django_celery_beat.json
  6. python manage.py dumpdata django_celery_results --indent=2 > myapp_infra/fixtures/django_celery_results.json
复制代码

  • 转换格式:上述导出的文件格如果是UTF-16 LE编码,需要手动转换为UTF-8编码。
格式转换步骤:

  • 在 VS Code 中,打开上述导出的文件。查看右下角,显示的编码格式。
3.png


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

项目生产部署时,向数据库导入初始数据
  1. # 进入Django项目根目录(包含manage.py的目录),执行下面命令
  2. # Django 会在每个安装的应用程序的 `fixtures` 目录中搜索
  3. python manage.py loaddata myapp_system.json myapp_infra.json
  4. python manage.py loaddata django_celery_beat.json django_celery_results.json
复制代码
数据导入后效果:
4.png

点击查看完整代码
您正在阅读的是《Django从入门到实战》专栏!关注不迷路~

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册