壹些項目可能涉及多個數據庫的使用,並且方法很簡單。
1.在設置中設置數據庫。
例如,要使用兩個數據庫:
通過這種方式,可以識別兩個數據庫,壹個別名為default,另壹個別名為user。數據庫的別名可以任意確定。
默認的別名是特殊的。當模型在路由中沒有特殊選擇時,默認情況下使用默認數據庫。
當然,默認值也可以設置為null:
這樣,因為沒有默認的數據庫,所以有必要為所有模型進行數據庫路由,包括所使用的第三方庫中的模型。
2.為需要進行數據庫選擇的模型定義app_label。
3.編寫數據庫路由器
數據庫路由器用於確定模型使用哪個數據庫,主要定義了以下四種方法:
db_for_read(型號,* *提示)
指定模型用於讀取的數據庫。
寫數據庫(模型,* *提示)
指定模型用於寫入的數據庫。
allow _ relation(obj 1,obj2,* *提示)
確定obj1和obj2之間是否可以生成關聯,主要用於外鍵和多對多操作。
allow _ migrate(db,app_label,model_name=None,* *提示)
確定是否可以在別名為db的數據庫上運行遷移操作。
完整的示例:
數據庫設置:
如果妳想達到以下效果:
帶有app_label auth的模型在auth_db中讀寫,模型的其余部分在primary中寫入,讀取在replica1和replica2中隨機進行。
身份驗證:
這樣,帶有app_label auth的模型在auth_db中被讀取和寫入,並且允許關聯。遷移只能在auth_db數據庫中運行。
其余部分:
這樣,讀取在replica1和replica2中隨機進行,寫入使用primary。
最後,在設置中設置:
去做吧。
遷移時:
默認情況下,遷移操作在默認數據庫上進行。要對其他數據庫進行操作,可以使用- database選項,後跟數據庫的別名。
相應地,dbshell、dumpdata和loaddata命令都有- database選項。
您也可以手動選擇路線:
查詢:
保存:
移動:
上面的代碼會導致問題。當P第壹次保存在第壹個數據庫中時,默認情況下會生成壹個主鍵,因此當保存在第二個數據庫中時,P已經有壹個主鍵。如果不使用此主鍵,它不會導致問題,但如果之前使用過它,它將覆蓋原始數據。
有兩種解決方案;
1.保存前清除主鍵:
2.使用強制插入
刪除:
您是從哪個數據庫獲得該對象的,又是在哪裏刪除的?
如果要將對象從舊用戶數據庫轉移到新用戶數據庫: