码迷,mamicode.com
首页 > 数据库 > 详细

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

时间:2018-10-23 12:05:47      阅读:505      评论:0      收藏:0      [点我收藏+]

标签:word   opera   meta   turn   EAP   个数   mode   com   hint   

一、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 settings
from event.models import Event
DATABASE_MAPPING = settings.DATABASE_APPS_MAPPING
class 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():

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

标签:word   opera   meta   turn   EAP   个数   mode   com   hint   

原文地址:https://www.cnblogs.com/niejinmei/p/9835524.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!