django中使用多个数据库,跨库查询

一、settings配置多个数据库

DATABASES = { default: { # ‘ENGINE‘: ‘django.db.backends.mysql‘, ENGINE: common_framework.utils.mysql, NAME: choice, USER: ad_user, PASSWORD: ad_pass, HOST: 127.0.0.1, PORT: 3306, SIZE: 10, }, platform: { # ‘ENGINE‘: ‘django.db.backends.mysql‘, ENGINE: common_framework.utils.mysql, NAME: test, USER: ad_user, PASSWORD: ad_pass, HOST: 192.168.10.179, PORT: 3306, SIZE: 10, }}

二、数据库路由

  在settings目录同级下新建一个database_router.py文件

# -*- coding: utf-8 -*-from django.conf import settingsfrom event.models import EventDATABASE_MAPPING = settings.DATABASE_APPS_MAPPINGclass DataBaseAppsRouter(object): def db_for_read(self, model, **hints): """"Point all read operations to the specific database.""" if model._meta.app_label in DATABASE_MAPPING: if model == Event: return "default" else: return DATABASE_MAPPING[model._meta.app_label] return None def db_for_write(self, model, **hints): """Point all write operations to the specific database.""" if model._meta.app_label in DATABASE_MAPPING: return DATABASE_MAPPING[model._meta.app_label] return None # def allow_relation(self, obj1, obj2, **hints): # """Allow any relation between apps that use the same database.""" # db_obj1 = DATABASE_MAPPING.get(obj1._meta.app_label) # db_obj2 = DATABASE_MAPPING.get(obj2._meta.app_label) # if db_obj1 and db_obj2: # if db_obj1 == db_obj2: # return True # else: # return False # return None

三、跨表查询(using方法) 

EventUserAnswer.objects.using("platform").filter(user=user, team=request.user.team, status=1).first():

相关文章