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

Posted karina梅梅

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 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中使用多个数据库,跨库查询的主要内容,如果未能解决你的问题,请参考以下文章

跨库查询和多表查询

Oracle 跨库查询表数据(不同的数据库间建立连接)

请教怎么写跨库查询的SQL语句

Oracle数据库怎样跨库查询?

sql server 跨库查询

sql 跨库查询的问题