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():
  • 相关阅读:
    Collections与Arrays
    TreeMap
    HashMap
    单列集合的体系
    泛型的上下限
    09年最受关注的十大Visual Studio插件
    编码中的硬回车与软回车
    无法打开包括文件:'atlrx.h'的解决办法[原]
    【转】Notepad++,Eclipse和Visual Studio 2005常用快捷键对比
    【转】printf格式控制(你所不知道的printf妙用)
  • 原文地址:https://www.cnblogs.com/niejinmei/p/9835524.html
Copyright © 2011-2022 走看看