Django 多資料操作 router 方法

2021-06-07 02:25:54 字數 1955 閱讀 1170

django支援多資料庫,但是在官方文件中描述的不是很清楚。通過在網上搜尋,終於了解到使用方法。

官方文件  描述

本文僅僅描述使用router的方法,這裡以乙個漢字拼音資料庫為例

1首先在settings.py 檔案中新增多個資料庫

databases = ,

'pinyin':

,

}

2定義models

class pinyin(models.model):

_database = 'pinyin'

charact = models.charfield(max_length=4)

pinyin = models.charfield(max_length=10)

onset = models.charfield(max_length=2)

rime = models.charfield(max_length=4)

ucode = models.integerfield()

freq = models.integerfield()

其中模型 pinyin 有乙個額外的屬性 _database,他說明了模型將要連線的資料庫。如果沒有這個屬性,我們預設為他的值為default,即使預設的資料庫 。

3 編寫router

router有四個方法,

def

db_for_read

(self

,model,**

hints

) 建議 

model

物件讀操作時使用的資料庫。

def

db_for_write

(self

,model,**

hints

) 建議 

model

物件寫操作時使用的資料庫。

def

allow_relation

(self

,obj1

,obj2,**

hints) 當 obj1 和 obj2 之間允許有關係時返回 true ,不允許時返回 false ,或者沒有 意見時返回 none 。

defallow_syncdb

(self,db

,model

) 決定 

model

是否可以和 

db為別名的資料庫同步。

def db_for_read(self, model, **hints):

if hasattr(model, '_database'):

return model._database

return 'default'

def db_for_write(self, model, **hints):

if hasattr(model, '_database'):

return model._database

return 'default'

def allow_relation(self, obj1, obj2, **hints):

return none

def allow_syncdb(self, db, model):

if hasattr(model, '_database'):

model_db = model._database

else:

model_db = 'default'

if db == model_db:

return true

else:

return false

4向settings.py中新增 database_routers 

現在就完成了。

django 多對多資料新增

class userinfo models.model 使用者表 既有班主任也有老師 username models.charfield max length 32 password models.charfield max length 64 email models.charfield max ...

解決django配置多資料庫的使用

databases db2 如上,在django的settings中可以設定資料庫的鏈結引數,可以設定多個後端鏈結的資料庫的源,那麼怎麼來通過orm使用呢?我們正常查username 是 test 的人,使用預設的資料庫如下 user.objects.filter username test 但其實...

QT SQLite 多資料庫操作大全

一般qt都是把開啟乙個預設資料庫連線,操作乙個資料庫連線,但是對sqlite中頻率修改容易加鎖,因此有一種設計模式是把頻率修改的表放在不同的資料庫檔案中,但這樣要修改 運算元據庫部分 通常開啟 bool databasemanager opendb qsqlerror databasemanager...