一、数据库配置

介绍

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权限角色等初始化数据。如下图所示:

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

导出数据

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

  • 在应用APP下 ,创建 fixtures 目录。myapp_systemmyapp_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数据库配置避坑指南:从初始化到生产环境的实战优化的更多相关文章

  1. Android连接远程数据库的避坑指南

    Android连接远程数据库的避坑指南 今天用Android Studio连接数据库时候,写了个测试连接的按钮,然后连接的时候报错了,报错信息: 2021-09-07 22:45:20.433 705 ...

  2. Canal v1.1.4版本避坑指南

    前提 在忍耐了很久之后,忍不住爆发了,在掘金发了条沸点(下班时发的): 这是一个令人悲伤的故事,这条情感爆发的沸点好像被屏蔽了,另外小水渠(Canal意为水道.管道)上线一段时间,不出坑的时候风平浪静 ...

  3. CEF避坑指南(一)——下载并编译第一个示例

    CEF即Chromium Embedded Framework,Chrome浏览器嵌入式框架.它提供了接口供程序员们把Chrome放到自己的程序中.许多大型公司,如网易.腾讯都开始使用CEF进行前端开 ...

  4. Linux下Python3.6的安装及避坑指南

    Python3的安装 1.安装依赖环境 Python3在安装的过程中可能会用到各种依赖库,所以在正式安装Python3之前,需要将这些依赖库先行安装好. yum -y install zlib-dev ...

  5. Harmony OS 开发避坑指南——源码下载和编译

    Harmony OS 开发避坑指南--源码下载和编译 本文介绍了如何下载鸿蒙系统源码,如何一次性配置可以编译三个目标平台(Hi3516,Hi3518和Hi3861)的编译环境,以及如何将源码编译为三个 ...

  6. electron 编译 sqlite3避坑指南---尾部链接有已经编译成功的sqlite3

    electron 编译 sqlite3避坑指南(尾部链接有已经编译成功的sqlite3) sqlite很好用,不需要安装,使用electron开发桌面程序,sqlite自然是存储数据的不二之选,奈何编 ...

  7. [转帖]Kubernetes - nginx-ingress 配置跳坑指南

    Kubernetes - nginx-ingress 配置跳坑指南 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https:// ...

  8. Hive改表结构的两个坑|避坑指南

    Hive在大数据中可能是数据工程师使用的最多的组件,常见的数据仓库一般都是基于Hive搭建的,在使用Hive时候,遇到了两个奇怪的现象,今天给大家聊一下,以后遇到此类问题知道如何避坑! 坑一:改变字段 ...

  9. 今天 1024,为了不 996,Lombok 用起来以及避坑指南

    Lombok简介.使用.工作原理.优缺点 Lombok 项目是一个 Java 库,它会自动插入编辑器和构建工具中,Lombok 提供了一组有用的注解,用来消除 Java 类中的大量样板代码. 目录 L ...

  10. .NET AsyncLocal 避坑指南

    目录 AsyncLocal 用法简介 AsyncLocal 实现原理 AsyncLocal 的坑 AsyncLocal 的避坑指南 HttpContextAccessor 的实现原理 AsyncLoc ...

随机推荐

  1. api使用流程、Scanner键盘录入字符串

    1.api介绍 2.api使用流程 API帮助文档的使用流程 在索引位置搜索自己要查看的类 看包 目的: 是不是java.lang包(核心包), 不需要编写导包代码(import) - 不是java. ...

  2. Solana编译失败探讨(OpenEuler RISC-V版)

      Solana 是 2017 年由 Anatoly Yakovenko 创立的开源项目,旨在打造高性能.去中心化且低成本的区块链平台2.它采用独特的 Proof of History(PoH)共识机 ...

  3. 在web.xml下配置springmvc的核心控制器

    <!DOCTYPE web-app PUBLIC        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" ...

  4. java基础之集合(List)、Properties集合

    一.ArrayList集合的方法 1.public void add(int index, E element) : 将指定的元素,添加到该集合中的指定位置上. 2.public E get(int  ...

  5. 康谋分享 | AD/ADAS的性能概览:在AD/ADAS的开发与验证中“大海捞针”!

    如果您希望从数百万小时的驾驶数据中查找特定的相关驾驶事件和未遂事故,以确保您的所需功能正确运行,最好的方法就是创建一个系统性能的概览分析,实现在数据日志中快速检索关注点.为此,康谋在本文将为您详细介绍 ...

  6. 康谋分享 | 汽车仿真与AI的结合应用

    在自动驾驶领域,实现高质量的虚拟传感器输出是一项关键的挑战.所有的架构和实现都会涉及来自质量.性能和功能集成等方面的需求.aiSim也不例外,因此我们会更加关注于多个因素的协调,其中,aiSim传感器 ...

  7. Nerf和3DGS神经重建技术在自动驾驶模拟中的应用

    验证自动驾驶软件需要数百万公里的测试.这不仅意味着系统开发周期长,而且系统的复杂度也会不断增加,同时,大规模的实车测试也会耗费巨量的资源并且可能会面临未知的安全问题.aiSim这样的虚拟仿真工具可以减 ...

  8. MySQL 数据库的性能优化方法有哪些?

    MySQL 数据库性能优化是提高数据库响应速度和处理能力的重要手段.性能优化可以从多个层面入手,涵盖数据库设计.查询优化.硬件资源优化.配置调整等方面.以下是 MySQL 数据库常见的性能优化方法: ...

  9. 使用xxxbase应付CRUD后端任务

    很多的后端CRUD开发任务都是毫无意义的, 如果使用firebase/supabase/pocketbase这些工具快速应付这些任务才是重要的. 如果是一位研究生, 在面对导师的垃圾横向的时候, 这种 ...

  10. sql学习day2——运用case进行有条件的update(续day1)

    1.薪水表,如下所示,要求:为下一年调整工资22000以下的员工涨工资10%,24000以上的员工减少10% 思考:如果先update薪水24000以上的员工,假设某工资为24000,24000*(1 ...