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

这篇具有很好参考价值的文章主要介绍了【Web开发 | Django】数据库分流之道:探索Django多数据库路由最佳实践。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【Web开发 | Django】数据库分流之道:探索Django多数据库路由最佳实践,【Django | 项目开发】从入门到上线,数据库,前端,django,服务器,云原生,后端,python

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

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

【Web开发 | Django】数据库分流之道:探索Django多数据库路由最佳实践,【Django | 项目开发】从入门到上线,数据库,前端,django,服务器,云原生,后端,python

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

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

背景

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

【Web开发 | Django】数据库分流之道:探索Django多数据库路由最佳实践,【Django | 项目开发】从入门到上线,数据库,前端,django,服务器,云原生,后端,python

假如我们现在有一个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中的应用,主键配置。【Web开发 | Django】数据库分流之道:探索Django多数据库路由最佳实践,【Django | 项目开发】从入门到上线,数据库,前端,django,服务器,云原生,后端,python

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

【Web开发 | Django】数据库分流之道:探索Django多数据库路由最佳实践,【Django | 项目开发】从入门到上线,数据库,前端,django,服务器,云原生,后端,python

  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',
#}

后台注册模型,运行服务器,查看后台,设置成功
【Web开发 | Django】数据库分流之道:探索Django多数据库路由最佳实践,【Django | 项目开发】从入门到上线,数据库,前端,django,服务器,云原生,后端,python

问题
由于之前多次配置admin,导致了重定向问题, 这个时候我们只要刷新重启一下就行(清楚浏览器缓存)
【Web开发 | Django】数据库分流之道:探索Django多数据库路由最佳实践,【Django | 项目开发】从入门到上线,数据库,前端,django,服务器,云原生,后端,python

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

【Web开发 | Django】数据库分流之道:探索Django多数据库路由最佳实践,【Django | 项目开发】从入门到上线,数据库,前端,django,服务器,云原生,后端,python
🤞到这里,如果还有什么疑问🤞
🎩欢迎私信博主问题哦,博主会尽自己能力为你解答疑惑的!🎩
🥳如果对你有帮助,你的赞是对博主最大的支持!!🥳文章来源地址https://www.toymoban.com/news/detail-728889.html

到了这里,关于【Web开发 | Django】数据库分流之道:探索Django多数据库路由最佳实践的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Django后端开发——mysql数据库连接遇到的问题及解决

    stackflow帖子:https://stackoverflow.com/questions/39281594/error-1698-28000-access-denied-for-user-rootlocalhost 报错: 数据库拒绝root用户的连接 settings.py中关于数据库的配置: 可以看到root用户的密码为123456 但是在mysql数据库里面查看用户信息,root的密码为空 这样的不匹配导致连接失败 之前尝试

    2024年02月20日
    浏览(21)
  • 二挡起步——pythonweb开发Django框架,前端原生+Django后端框架+python网络抓包(代替数据库数据)(附带小案例)

     大家好,我是csdn的博主: lqj_本人 这是我的个人博客主页: lqj_本人的博客_CSDN博客-微信小程序,前端,python领域博主 lqj_本人擅长微信小程序,前端,python,等方面的知识 https://blog.csdn.net/lbcyllqj?spm=1011.2415.3001.5343 哔哩哔哩欢迎关注: 小淼Develop 小淼Develop的个人空间-小淼Develop个

    2024年02月03日
    浏览(27)
  • Web开发3:数据库使用

    欢迎来到Web开发系列的第三篇!今天我们将探讨如何在Web开发中使用数据库。数据库是存储和管理数据的重要工具,它在现代应用程序中起着至关重要的作用。无论是社交媒体应用、电子商务平台还是博客网站,数据库都是不可或缺的一部分。 首先,让我们来了解一下数据库

    2024年01月23日
    浏览(18)
  • 微信小程序+web数据库的开发实践

    生活中使用微信小程序的场景越来越多,它实现了用户对于应用“触手可及、用完即走”的理想需求。微信小程序的开发难度也低于APP的开发制作,使用它会更便利、低成本、高经济效益。 但是要完成一个小程序涉及到的技术栈比较多,要开发的模块也很多。比如: 微信小

    2024年02月15日
    浏览(21)
  • PostgreSQL修炼之道之数据库优化(十八)

    12.1.1 数据库优化准则         数据库优化的思路有很多种。比较常用的是下面两种优化思路。 第一种思路:有人说过,“The fastest way to do something is don\\\'t do it”,意思是说,“做得最快的方法就是不做”。从这个思路上来说,把一些无用的步骤或作用不大的步骤去掉就是

    2024年02月10日
    浏览(30)
  • Java开发者的Python快速实战指南:探索向量数据库之图像相似搜索-文字版

    首先,我要向大家道个歉。原本我计划今天向大家展示如何将图片和视频等形式转换为向量并存储在向量数据库中,但是当我查看文档时才发现,腾讯的向量数据库尚未完全开发完成。因此,今天我将用文本形式来演示相似图片搜索。如果您对腾讯的产品动态不太了解,可以

    2024年02月05日
    浏览(30)
  • 🔥🔥Java开发者的Python快速实战指南:探索向量数据库之图像相似搜索-文字版

    首先,我要向大家道个歉。原本我计划今天向大家展示如何将图片和视频等形式转换为向量并存储在向量数据库中,但是当我查看文档时才发现,腾讯的向量数据库尚未完全开发完成。因此,今天我将用文本形式来演示相似图片搜索。如果您对腾讯的产品动态不太了解,可以

    2024年02月05日
    浏览(26)
  • Python Flask Web开发二:数据库创建和使用

    数据库在 Web 开发中起着至关重要的作用。它不仅提供了数据的持久化存储和管理功能,还支持数据的关联和连接,保证数据的一致性和安全性。通过合理地设计和使用数据库,开发人员可以构建强大、可靠的 Web 应用程序,满足用户的需求。这里介绍:SQLAlchemy 安装pymysql和

    2024年02月10日
    浏览(16)
  • 深入解析MVCC:多版本并发控制的数据库之道

    目录 引言 一、什么是MVCC? 二、MVCC的实现原理 2.1版本号 2.1.1版本号的作用: 2.1.2版本号的组成: 2.1.3.示例 2.2事务id 2.2.1事务ID的作用: 2.2.2事务ID的生成: 2.2.3示例: 2.3 快照(Snapshot) 2.3.1快照的作用: 2.3.2快照的实现方式: 2.3.3示例: 2.4版本链(Version Chain) 2.4.1版本链

    2024年01月24日
    浏览(24)
  • java web 开发 第8章 JSP中使用数据库

    目录 连接MySQL数据库 查询记录 更新、添加与删除记录 用结果集操作数据库中的表 预处理语句 事务 分页显示记录 在JSP中连接MySQL数据库的步骤如下: 1. 下载并安装MySQL数据库,启动MySQL服务。 2. 在MySQL中创建一个数据库和表,用于存储数据。可以使用MySQL自带的命令行工具或

    2024年02月06日
    浏览(20)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包