【Web开发 | Django】数据库分流之道:探索Django多数据库路由最佳实践

news2024/10/3 3:15:28

在这里插入图片描述

🤵‍♂️ 个人主页: @AI_magician
📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。
👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!🐱‍🏍
🙋‍♂️声明:本人目前大学就读于大二,研究兴趣方向人工智能&硬件(虽然硬件还没开始玩,但一直很感兴趣!希望大佬带带)

该文章收录专栏
✨—【Django | 项目开发】从入门到上线 专栏—✨

在这里插入图片描述

该文章收录专栏
✨—Django从(图文并茂轻松上手教程)专栏—✨!!

🎏内容:
✨【Djang | 增删改查】学生系统案例✨
✨【Django | 项目搭建】快速搭建自己的项目✨
✨【Django | allauth】登录_注册_邮箱验证_密码邮箱重置✨
✨【Django | allauth】useprofile 用户模型扩展✨
✨【Django | allauth】重写allauth重置密码方法✨
✨【Django | 开发】面试招聘信息网站(快速搭建核心需求)✨
✨【Django | 开发】面试招聘信息网站(增加csv,excel导出&日志管理功能)✨
✨【Django | 开发】面试招聘信息网站(处理产品细节和权限&美化页面样式)✨
✨【Django | 开发】面试招聘信息网站(划分面试官权限&集成钉钉消息)✨
✨【Django | 开发】面试招聘信息网站(用户登录注册&投在线递简历)✨

背景

在实际上,有许多遗留的系统,但此时我们仍需要管理其数据,并在不更改其数据表结构的情况下,此时我们可以使用多数据库路由实现

在这里插入图片描述

假如我们现在有一个mysql的数据库信息,我们需要将其纳入管理

配置多数据源settings

  1. 创建应用用于存放管理
startapp company
  1. settings添加多数据库配置
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'django_recruitment',
        'PASSWORD': '123456',
        'PORT': '3306',
        'USER': 'root',
        'HOST': 'db',
        # 'HOST': '127.0.0.1',
        'OPTIONS': {'charset': 'utf8mb4'},
    },  # todo 注意:这里使用的是db别名,docker会自动解析成ip  部署!
    'employee': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'employee',
        'PASSWORD': '123456',
        'PORT': '3306',
        'USER': 'root',
        # 'HOST': '127.0.0.1',
        'HOST': 'db',
        'OPTIONS': {'charset': 'utf8mb4'},
    },
    # 'sqlite': {
    #     'ENGINE': 'django.db.backends.sqlite3',
    #     'NAME': BASE_DIR / 'db.sqlite3',
    # }
}
  1. 根据数据库生成对应model

但需要注意是的要为数据库设置一个ID主键不然会报错(见文章,显然这里的id就是django默认主键,还要再app.py中设置对应默认主键字段),或者修改django中的应用,主键配置。在这里插入图片描述

python manage.py inspectdb --database=employee [12...]  > company/models.py

在这里插入图片描述

  1. 创建router数据库路由类并添加到settings

我们既然是多数据库路由,那么在对表进行增删改查就需要进行区分,路由类router则充当了这个角色

创建路由类

路由必须要有四个函数

  1. db_for_read 读
  2. db_for_write 写
  3. allow_relation 数据库之间链接关系
  4. allow_migrate 是否允许迁移数据
"""
setting/routers.py
一个数据库路由是一个拥有4个方法的类
"""


class DatabaseRouter:
    #  设置 次数据库的应用 set
    router_app_labels = {'employee'}

    # 对模型操作
    def db_for_read(self, model, **hints):
        if model._meta.app_label in self.router_app_labels:
            return 'employee'
        return 'default'  # 返回数据库路由

    def db_for_write(self, model, **hints):
        if model._meta.app_label in self.router_app_labels:
            return 'employee'
        return 'default'

    # 不允许数据库之间链接关系
    def allow_relation(self, obj1, obj2, **hints):
        return None

    # 允许迁移
    def allow_migrate(self, db, app_label, model_name=None, **hints):
        if app_label in self.router_app_labels:
            """
            遗留数据库不允许迁移
            """
            return False
        return True

  1. setting添加配置
"""多数据库路由"""
DATABASE_ROUTERS = ['settings.router.DatabaseRouter']
#DATABASE_APPS_MAPPING = {
#    'employee': 'employee',
#}

后台注册模型,运行服务器,查看后台,设置成功
在这里插入图片描述

问题
由于之前多次配置admin,导致了重定向问题, 这个时候我们只要刷新重启一下就行(清楚浏览器缓存)
在这里插入图片描述

参考文献:
Django中如何实现数据库路由?
多数据库路由(重点)

在这里插入图片描述
🤞到这里,如果还有什么疑问🤞
🎩欢迎私信博主问题哦,博主会尽自己能力为你解答疑惑的!🎩
🥳如果对你有帮助,你的赞是对博主最大的支持!!🥳

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1033533.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python中统计单词出现的次数,包含(PySpark方法)

思路: 定义一个函数,使用open函数,将文本内容打开。 定义一个空字典和空列表,进行循环及条件判断操作def count_word(file_path):dict_data {} #定义一个空字典f open(file_path,"r",encoding"UTF-8")lis…

C# Onnx Yolov8 Detect 水果识别

效果 项目 代码 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System…

Chrome浏览器删除网站cookies的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

iOS——ViewController的生命周期

ViewController ViewController的生命周期是指在应用程序运行过程中,ViewController实例从创建到销毁的整个过程。在这个过程中,ViewController会经历一系列的生命周期方法,这些方法可以帮助开发者管理ViewController及其相关的视图和逻辑。…

20230919在WIN10下使用python3将PDF文档转为DOCX格式的WORD文档

20230919在WIN10下使用python3将PDF文档转为DOCX格式的WORD文档 2023/9/19 11:20 python pdf word https://blog.csdn.net/u013185349/article/details/130059657 Python实现PDF转Word文档 AcceptedLin 已于 2023-04-10 14:45:17 修改 1243 收藏 1 文章标签: pd…

软件系统的测试方法

软件系统测试是确保软件质量和功能的关键步骤,选择适当的测试方法取决于项目的性质、需求和资源可用性。通常,综合运用多种测试方法可以更全面地评估软件系统的质量和性能。下面列举了一些常见的软件系统测试方法,希望对大家有所帮助。北京木…

通过http发送post请求的三种Content-Type分析

通过okhttp向服务端发起post网络请求,可以通过Content-Type设置发送请求数据的格式。 常用到的三种: 1)application/x-www-form-urlencoded; charsetutf-8 2)application/json; charsetutf-8 3)multipart/form-dat…

数据融合的并行计算

1、 数据融合的算法 数据融合的算法当中,需要对每一个格点i进行逐个计算,公式如下 2、出现的问题 但是随着背景场的空间分辨率的提高,格点数急剧增加。如空间分辨率为0.01的话,那么15✖15的空间范围内就有1500✖1500个格点。那…

003 linux 自动化构建工具-make/makefile

前言 本文将会向您介绍make/makefile的原理与操作 引入 首先先向您介绍linux的编译器gcc的编译过程: 预处理 预处理功能主要包括宏定义,文件包含,条件编译,去注释等。 预处理指令是以#号开头的代码行。 实例: gcc –E hello.c –o hello.i 选项“-E”,该选项的作…

iOS线上闪退问题解决方案

iOS线上闪退问题的收集工具是关键,它们可以帮助你及时发现和解决应用程序中的崩溃问题。以下是一些常用的iOS线上闪退问题收集工具及其使用方法,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合…

POJ 3977 Subset 折半枚举+二分搜素+双指针

一、题目大意 我们有N&#xff08;N<35&#xff09;个元素&#xff0c;从中选取一个子集&#xff0c;使得它的元素求和的绝对值最小&#xff0c;如果有多个可行解&#xff0c;选择元素最小的。 输出最优子集的元素总和绝对值&#xff0c;和最优子集元素的数量。 二、解题…

Google拟放弃博通自行研发AI芯片 | 百能云芯

谷歌计划自行研发人工智能&#xff08;AI&#xff09;芯片&#xff0c;考虑将博通&#xff08;Broadcom&#xff09;从其供应商名单中剔除&#xff0c;但谷歌强调双方的合作关系不会受到影响。 根据美国网络媒体《The Information》的报道&#xff0c;谷歌高层正在讨论可能在20…

窜货采买第三方怎么选择

窜货溯源服务听起来并不难&#xff0c;无非就是买货&#xff0c;但是否能买到货&#xff0c;同时在买到之后能否顺利完成溯源工作&#xff0c;也是非常有学问的&#xff0c;很多品牌会选择第三方服务商进行采买合作&#xff0c;这样可以规避品牌自己操作时的不合规性&#xff0…

Exploit-DB 使用小结

Exploit-DB &#xff08;网址&#xff1a;https://www.exploit-db.com&#xff09; 是一个漏洞库网站 &#xff0c;存储了大量的漏洞利用程序&#xff0c;可以帮助安全研究者和渗透测试工程师更好的进行安全测试工作&#xff0c;目前是世界上公开收集漏洞最全的数据库&#xff…

CNN(八):Inception V1算法实战与解析

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客 &#x1f356; 原作者&#xff1a;K同学啊|接辅导、项目定制 1 Inception V1 Inception v1论文 1.1 理论知识 GoogLeNet首次出现在2014年ILSVRC比赛中获得冠军。这次的版本通常称其为Inception V1。…

QtCreator报大量未知标识符错误的解决方法

目录 前言背景介绍问题1问题1解决方法问题2问题2 解决方法总结 前言 本文记录了在使用QtCreator开发时遇到的一个错误&#xff0c;导致编译时出现大量的“未知标识符”&#xff0c;经过一番努力最终解决了这个问题&#xff0c;特在此记录。 背景介绍 Qt项目在麒麟V10 系统下…

Linux中创建用户要自己设置密码

因为不知道Linux默认设置的密码&#xff0c;没办法接下来愉快的使用。如下&#xff1a; 而想要新建Linux用户密码&#xff0c;请您执行以下步骤: . 1.打开终端并以root身份登录; 2.输入命令“useradd username",其中username为您新建的用户名; 3.使用命令“passwd usernam…

《向量数据库指南》——向量搜索库Faiss 迁移到 Milvus 2.x

Faiss -> Milvus 2.x 1. Faiss 数据准备 前提条件是用户已经准备好了自己的 faiss 数据文件。(为了能快速体验,在项目源码的 testfiles 目录下放置了 faiss 测试数据方便用户体验: faiss_ivf_flat.index. 2. 编译打包 这部分同上,不再展开介绍。 3. 配置 migration.ymal…

【数据结构】顺序查找,折半查找,分块查找的知识点总结及相应的代码实现

目录 1、顺序查找 定义及步骤 代码实现 2、折半查找 定义及步骤 代码实现 折半查找判定树 3、分块查找 定义及步骤 1、顺序查找 定义及步骤 顺序查找的定义&#xff1a;从数据集合的起始位置开始&#xff0c;逐一比较每个数据元素&#xff0c;直到找到所要查找…

百度SEO优化不稳定的原因分析(提升网站排名的稳定性)

百度SEO优化不稳定介绍蘑菇号-www.mooogu.cn SEO不稳定是指网站在搜索引擎中的排名不稳定&#xff0c;随着时间的推移会发生变化。这种情况可能会出现在网站页面结构、内容质量、外链质量等方面存在缺陷或不合理之处。因此&#xff0c;优化SEO非常重要&#xff0c;可以提高网站…