Django中如何实现数据库路由?
Posted 程序猿终结者
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django中如何实现数据库路由?相关的知识,希望对你有一定的参考价值。
虽然我们提供了数据库的信息,它知道怎么连接数据库,但问题是我们保存里面有很多模型,它不知道哪个模型存到哪个数据库。这就要求我们自己来指定,也就是我们自己来实现一个数据库路由。一个数据库路由是一个拥有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
以上是关于Django中如何实现数据库路由?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用Django 结合WebSocket 进行实时目标检测呢?以yolov5 为例,实现:FPS 25+ (1: 后端)
如何使用Django 结合WebSocket 进行实时目标检测呢?以yolov5 为例,实现:FPS 25+ (1: 后端)