???♂? 個人主頁: @AI_magician
??主頁地址: 作者簡介:CSDN內(nèi)容合伙人,全棧領(lǐng)域優(yōu)質(zhì)創(chuàng)作者。
?????景愿:旨在于能和更多的熱愛計算機的伙伴一起成長!!?????
???♂?聲明:本人目前大學(xué)就讀于大二,研究興趣方向人工智能&硬件(雖然硬件還沒開始玩,但一直很感興趣!希望大佬帶帶)
該文章收錄專欄
?—【Django | 項目開發(fā)】從入門到上線 專欄—?
該文章收錄專欄
?—Django從(圖文并茂輕松上手教程)專欄—???!??內(nèi)容:
?【Djang | 增刪改查】學(xué)生系統(tǒng)案例?
?【Django | 項目搭建】快速搭建自己的項目?
?【Django | allauth】登錄_注冊_郵箱驗證_密碼郵箱重置?
?【Django | allauth】useprofile 用戶模型擴展?
?【Django | allauth】重寫allauth重置密碼方法?
?【Django | 開發(fā)】面試招聘信息網(wǎng)站(快速搭建核心需求)?
?【Django | 開發(fā)】面試招聘信息網(wǎng)站(增加csv,excel導(dǎo)出&日志管理功能)?
?【Django | 開發(fā)】面試招聘信息網(wǎng)站(處理產(chǎn)品細(xì)節(jié)和權(quán)限&美化頁面樣式)?
?【Django | 開發(fā)】面試招聘信息網(wǎng)站(劃分面試官權(quán)限&集成釘釘消息)?
?【Django | 開發(fā)】面試招聘信息網(wǎng)站(用戶登錄注冊&投在線遞簡歷)?
背景
在實際上,有許多遺留的系統(tǒng),但此時我們?nèi)孕枰芾砥鋽?shù)據(jù),并在不更改其數(shù)據(jù)表結(jié)構(gòu)的情況下,此時我們可以使用多數(shù)據(jù)庫路由實現(xiàn)
假如我們現(xiàn)在有一個mysql的數(shù)據(jù)庫信息,我們需要將其納入管理
配置多數(shù)據(jù)源settings
- 創(chuàng)建應(yīng)用用于存放管理
startapp company
-
settings
添加多數(shù)據(jù)庫配置
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',
# }
}
- 根據(jù)數(shù)據(jù)庫生成對應(yīng)
model
但需要注意是的要為數(shù)據(jù)庫設(shè)置一個ID主鍵不然會報錯(見文章,顯然這里的id
就是django默認(rèn)主鍵,還要再app.py中設(shè)置對應(yīng)默認(rèn)主鍵字段),或者修改django中的應(yīng)用,主鍵配置。
python manage.py inspectdb --database=employee [表1 表2...] > company/models.py
- 創(chuàng)建
router
數(shù)據(jù)庫路由類并添加到settings
我們既然是多數(shù)據(jù)庫路由,那么在對表進行增刪改查就需要進行區(qū)分,路由類router
則充當(dāng)了這個角色
創(chuàng)建路由類
路由必須要有四個函數(shù)
- db_for_read 讀
- db_for_write 寫
- allow_relation 數(shù)據(jù)庫之間鏈接關(guān)系
- allow_migrate 是否允許遷移數(shù)據(jù)
"""
setting/routers.py
一個數(shù)據(jù)庫路由是一個擁有4個方法的類
"""
class DatabaseRouter:
# 設(shè)置 次數(shù)據(jù)庫的應(yīng)用 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' # 返回數(shù)據(jù)庫路由
def db_for_write(self, model, **hints):
if model._meta.app_label in self.router_app_labels:
return 'employee'
return 'default'
# 不允許數(shù)據(jù)庫之間鏈接關(guān)系
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:
"""
遺留數(shù)據(jù)庫不允許遷移
"""
return False
return True
- 在
setting
添加配置
"""多數(shù)據(jù)庫路由"""
DATABASE_ROUTERS = ['settings.router.DatabaseRouter']
#DATABASE_APPS_MAPPING = {
# 'employee': 'employee',
#}
后臺注冊模型,運行服務(wù)器,查看后臺,設(shè)置成功
問題:
由于之前多次配置admin,導(dǎo)致了重定向問題, 這個時候我們只要刷新重啟一下就行(清楚瀏覽器緩存)
參考文獻:
Django中如何實現(xiàn)數(shù)據(jù)庫路由?
多數(shù)據(jù)庫路由(重點)文章來源:http://www.zghlxwxcb.cn/news/detail-728889.html
??到這里,如果還有什么疑問??
??歡迎私信博主問題哦,博主會盡自己能力為你解答疑惑的!??
??如果對你有幫助,你的贊是對博主最大的支持??!??文章來源地址http://www.zghlxwxcb.cn/news/detail-728889.html
到了這里,關(guān)于【W(wǎng)eb開發(fā) | Django】數(shù)據(jù)庫分流之道:探索Django多數(shù)據(jù)庫路由最佳實踐的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!