🤵♂️ 个人主页: @AI_magician
📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。
👨💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!🐱🏍
🙋♂️声明:本人目前大学就读于大二,研究兴趣方向人工智能&硬件(虽然硬件还没开始玩,但一直很感兴趣!希望大佬带带)
该文章收录专栏 ✨---【Django | 项目开发】从入门到上线 专栏---✨ 该文章收录专栏 ✨---Django从(图文并茂轻松上手教程)专栏---✨!! 🎏内容: ✨【Djang | 增删改查】学生系统案例✨ ✨【Django | 项目搭建】快速搭建自己的项目✨ ✨【Django | allauth】登录注册邮箱验证_密码邮箱重置✨ ✨【Django | allauth】useprofile 用户模型扩展✨ ✨【Django | allauth】重写allauth重置密码方法✨ ✨【Django | 开发】面试招聘信息网站(快速搭建核心需求)✨ ✨【Django | 开发】面试招聘信息网站(增加csv,excel导出&日志管理功能)✨ ✨【Django | 开发】面试招聘信息网站(处理产品细节和权限&美化页面样式)✨ ✨【Django | 开发】面试招聘信息网站(划分面试官权限&集成钉钉消息)✨ ✨【Django | 开发】面试招聘信息网站(用户登录注册&投在线递简历)✨
在实际上,有许多遗留的系统,但此时我们仍需要管理其数据,并在不更改其数据表结构的情况下,此时我们可以使用多数据库路由实现
假如我们现在有一个mysql的数据库信息,我们需要将其纳入管理
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',
# }
}
model
但需要注意是的要为数据库设置一个ID主键不然会报错(见文章,显然这里的id
就是django默认主键,还要再app.py中设置对应默认主键字段),或者修改django中的应用,主键配置。
python manage.py inspectdb --database=employee [表1 表2...] > company/models.py
router
数据库路由类并添加到settings我们既然是多数据库路由,那么在对表进行增删改查就需要进行区分,路由类router
则充当了这个角色
创建路由类
路由必须要有四个函数
"""
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
setting
添加配置 """多数据库路由"""
DATABASE_ROUTERS = 'settings.router.DatabaseRouter'
#DATABASE_APPS_MAPPING = {'employee': 'employee',#}后台注册模型,运行服务器,查看后台,设置成功
问题:
由于之前多次配置admin,导致了重定向问题, 这个时候我们只要刷新重启一下就行(清楚浏览器缓存)
参考文献:
我正在参与2023腾讯技术创作特训营第二期有奖征文,瓜分万元奖池和键盘手表
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。