一、数据库配置

介绍

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. Visual Studio 2017 导出 ASP.NET Core 项目模版项目文件为空

    问题重现 VS 2017 针对 ASP.NET Core 导出模版功能有问题 解决办法 visual-studio-2017-templates-and-the-missing-content 目前官 ...

  2. 二叉树专题学习(C++版) 基础的上机题

    前言: 由于二叉树这一章的题型比较多,涉及到的递归程序也较多,所以单开一个随笔来记录这个学习过程,希望对读者有帮助. 理论知识基础 在二叉树的选择题中,常常会涉及到对于最多或最少结点.最大或最小高度. ...

  3. 麒麟V10部署ROCEv2网卡配置步骤

    以下是为麒麟服务器版V10配置RoCEv2的步骤: 第一步:确认硬件和驱动支持 在开始配置之前,首先要确保你的服务器硬件满足要求.通常需要Mellanox ConnectX系列网卡(例如mlx5系列) ...

  4. python调用QQ机器人向指定QQ发消息

    暂时没想到这个能用来干什么,只是刚好看到相关文章,学习一下,就拿获取基金信息来做试验把 爬取基金的信息就不介绍了,请参考https://www.cnblogs.com/becks/p/14500495 ...

  5. Streamlit快速入门指南

    theme: orange Streamlit是一个Python库,允许您创建交互式的数据科学和机器学习Web应用程序. Streamlit介绍 Streamlit是一个Python库,允许您创建交互 ...

  6. K8s Pod 控制器介绍及应用示例

    Kubernetes 官方文档:Pod 控制器 Pod控制器介绍 Pod是kubernetes的最小管理单元,在kubernetes中,按照pod的创建方式可以将其分为两类: 自主式pod:kuber ...

  7. 关于 IFreeSql 注入,与 AspectCore 冲突的说明

    FreeSql 以 MIT 开源协议托管于 github:https://github.com/2881099/FreeSql IFreeSql 作为 ORM 顶级对象,没有设置 NameSpace( ...

  8. tar命令打包指定目录及其文件,而不包括其上级目录

    想指定将/var目录下的log目录及其文件打包到当前目录,在压缩包解压时不包括/var目录,可使用如下方式: tar -zcvf log_bak.tar.gz -C /var/ log # 注意log ...

  9. 在postman中为每个测试用例添加相同的请求头

    最近在学习的时候看到可以在postman中可以为每个测试用例添加相同的请求头,这个就不用单独去设置了,可以说是非常好用,遂记录一下. 具体设置如下: https://postman.org.cn/

  10. 使用Ollama本地化部署DeepSeek

    1.Ollama 简介 Ollama 是一个开源的本地化大模型部署工具,旨在简化大型语言模型(LLM)的安装.运行和管理.它支持多种模型架构,并提供与 OpenAI 兼容的 API 接口,适合开发者和 ...