zoukankan      html  css  js  c++  java
  • 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():
  • 相关阅读:
    检查所有资产的剩余折旧年限
    如何返回standard API 的错误信息
    Host concurrent的建立方法
    Project的目录结构
    计划外折旧(unplanned deprn)API开发例程
    UML学习笔记
    ASP.Net2.0使用Log4Net(二)
    NBear学习笔记(一)
    ASP.Net2.0使用Log4Net(一)
    ASP.net前后台调用
  • 原文地址:https://www.cnblogs.com/niejinmei/p/9835524.html
Copyright © 2011-2022 走看看