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有四個方法,
defdb_for_read
(self
,model,**
hints
) 建議
model
物件讀操作時使用的資料庫。
defdb_for_write
(self
,model,**
hints
) 建議
model
物件寫操作時使用的資料庫。
defallow_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...