0


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

在这里插入图片描述

🤵‍♂️ 个人主页: @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 [表1 表2...]> 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个方法的类
"""classDatabaseRouter:#  设置 次数据库的应用 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:"""
            遗留数据库不允许迁移
            """returnFalsereturnTrue
  1. setting添加配置
"""多数据库路由"""
DATABASE_ROUTERS =['settings.router.DatabaseRouter']#DATABASE_APPS_MAPPING = {#    'employee': 'employee',#}

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

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

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

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

标签: 数据库 前端 django

本文转载自: https://blog.csdn.net/weixin_66526635/article/details/126013201
版权归原作者 计算机魔术师 所有, 如有侵权,请联系我们删除。

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

还没有评论