Django多数据库配置:mysql、mongo、redis、达梦
Django多数据库配置:mysql、mongo、redis、达梦
- 一、Django多数据库配置-mysql连接
- 二、Django多数据库配置-mongo连接
- 三、Django多数据库配置-达梦数据库连接
- 四、Django多数据库配置-redis连接
- 五、Django跨应用使用其他数据库
- 六、mysql连接池配置
- 七、redis连接池配置
- 八、mongo连接池配置
UV教程:Python多版本管理神器
Django教程:Django项目开发全链路:数据库操作、多环境配置、windows/linux项目部署一站式指南
一、Django多数据库配置-mysql连接
1.进入项目目录,运行 uv run python manage.py startapp mysqlDemo新建应用,未使用uv管理工具可使用python manage.py startapp mysqlDemo
2.修改django的setting.py文件中的DATABASES、INSTALLED_APPS配置
INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','mysqlDemo'
]
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'django','USER': 'root','PASSWORD': 'root','HOST': 'localhost','PORT': '3306',}
}
3.修改mysqlDemo>models.py,新建数据模型
from django.core.validators import MaxValueValidator, MinValueValidator
from django.db import modelsclass Class(models.Model):"""班级模型字段说明:- name: 班级名称,从预定义的年级名称中选择,具有唯一性- class_code: 班级代码,对应年级编号,具有唯一性- department: 班级类型,区分理科班、文科班等不同类型- max_students: 最大学生数,限制班级容量在1-100人之间- established_date: 成立日期,记录班级成立时间- graduation_date: 预计毕业日期,可为空的毕业时间预估- is_active: 是否活跃,标识班级当前状态- head_teacher: 班主任,外键关联到用户模型,可为空- created_at: 创建时间,自动记录数据创建时间- updated_at: 更新时间,自动记录最后修改时间- description: 班级描述,可选的详细说明文本预定义数据:- class_info: 包含1-8年级的详细信息字典- name_choices: 基于class_info生成的班级名称选项- class_code_choices: 基于class_info生成的班级代码选项- department_choices: 班级类型选项列表"""class_info = {'1':{'name': '一年级','description': '一年级 - 小学起始阶段,6-7岁'},'2':{'name': '二年级','description': '二年级 - 小学基础阶段,7-8岁'},'3':{'name': '三年级','description': '三年级 - 小学巩固阶段,8-9岁'},'4':{'name': '四年级','description': '四年级 - 小学提高阶段,9-10岁'},'5':{'name': '五年级','description': '五年级 - 小学进阶阶段,10-11岁'},'6':{'name': '六年级','description': '六年级 - 小学毕业阶段,11-12岁'},'7':{'name': '七年级','description': '七年级 - 初中起始阶段(初一),12-13岁'},'8':{'name': '八年级','description': '八年级 - 初中中间阶段(初二),13-14岁'}}# 基本信息name_choices = [(v['name'], v['description']) for k, v in class_info.items()]name = models.CharField(max_length=100, choices=name_choices,verbose_name='班级名称',unique=True,db_comment='\n'.join([f'{name}:{description}' for name, description in name_choices]))class_code_choices = [(k, v['name']) for k, v in class_info.items()]class_code = models.CharField(max_length=20, choices=class_code_choices, verbose_name='班级代码', unique=True,db_comment='\n'.join([f'{code}:{name}' for code, name in class_code_choices]))department_choices = [('science', '理科班'),('arts', '文科班'),('commercial', '商科班'),('general', '普通班'),('experimental', '实验班'),('international', '国际班'),]department = models.CharField(max_length=20, choices=department_choices, verbose_name='班级类型',db_comment='\n'.join([f'{code}:{dep}' for code, dep in department_choices]))# 容量限制max_students = models.PositiveIntegerField(default=50,validators=[MinValueValidator(1), MaxValueValidator(100)],verbose_name='最大学生数',db_comment='最大学生数:1-100人')# 时间信息established_date = models.DateField(verbose_name='成立日期')graduation_date = models.DateField(verbose_name='预计毕业日期', null=True, blank=True)is_active = models.BooleanField(default=True, verbose_name='是否活跃',db_default=True)# 元数据created_at = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')updated_at = models.DateTimeField(auto_now=True, verbose_name='更新时间')description = models.TextField(verbose_name='班级描述', blank=True)class Meta:db_table = 'class'verbose_name = '班级'verbose_name_plural = '班级管理'ordering = ['class_code', 'name']indexes = [models.Index(fields=['class_code', 'department']),models.Index(fields=['is_active']),]
4.运行uv add pymysql安装pymysql,未使用uv管理工具可使用pip install pymysql
5.修改setting.py同级目录下的__init__.py
import pymysqlpymysql.install_as_MySQLdb()
6.进入项目目录,依次运行下面命令,即可在对应数据库中创建模型中的数据模型(表),第一次运行会创建一些Django内置的表
uv run python manage.py makemigrations mysqlDemo #根据模型变更创建新的数据库迁移文件,未使用uv管理工具可使用pthon manage.py makemigrations schooluv run python manage.py migrate#同步模型与数据库,未使用uv管理工具可使用python manage.py migrate
7.修改mysqlDemo>views.py
import json
import time
from .models import Class
from django.core import serializers
from django.core.exceptions import ValidationError
from django.http import HttpResponse, JsonResponse
from django.utils.decorators import method_decorator
from django.views import View
from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.http import require_http_methods@method_decorator(csrf_exempt, name='dispatch')
@method_decorator(require_http_methods(['GET']), name='dispatch')
class AddClassView(View):def get(self, request):try:class_code = request.GET.get('code')name = Class.class_info[class_code]['name']Class.objects.create(name=name, class_code=class_code, department='science',max_students=80,established_date=time.strftime('%Y-%m-%d'))return HttpResponse('班级添加成功')except Exception as ex: