雖然我們提供了數據庫的信息,它知道怎么連接數據庫,但問題是我們保存里面有很多模型,它不知道哪個模型存到哪個數據庫。這就要求我們自己來指定,也就是我們自己來實現一個數據庫路由。一個數據庫路由是一個擁有4個方法的類,這四個方法是:
db_for_read(model, **hints)
對於該model 用哪個數據庫來讀。
db_for_write(model, **hints)
對於該model用哪個數據庫來寫。
allow_relation(obj1, obj2, **hints)
是否允許兩個對象關聯到數據庫。
allow_migrate(db, app_label, model_name=None, **hints)
對於指定的app,是否允許對db這個數據庫進行migrate
打開routers.py文件,做如下配置:
class SampleDBRouter(object):
def db_for_read(self, model, **hints):
if model._meta.label == 'multiDB.Logger':
return 'logs' (如果是Logger'的模型,就返回logs的數據庫。將信息存到lab2)
elif model._meta.label == 'multiDB.LogUser':
return 'users'(如果是LogUser'的模型,就返回users的數據庫。將信息存到lab1)
return None
def db_for_write(self, model, **hints):
if model._meta.label == 'multiDB.Logger':
return 'logs'
elif model._meta.label == 'multiDB.LogUser':
return 'users'
return None
def allow_relation(self, obj1, obj2, **hints):
return True (關聯,存放到指定地方。)
def allow_migrate(self, db, app_label, model=None, **hints):
if model._meta.label == 'multiDB.Logger':
return db == 'logs'(如果模型是multiDB.Logger,數據庫是logs,就可以遷徙)
elif model._meta.label == 'multiDB.LogUser':
return db == 'users'(如果模型是multiDB.LogUser,數據庫是users,就可以遷徙)
return None