• 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():
  • 相关阅读:
    java基础知识回顾之---java String final类构造方法
    java基础知识回顾之---java String final类普通方法
    递归的理解
    跟着牛人学习
    【轻松学排序算法】眼睛直观感受几种常用排序算法
    《PhotoShop CS6 》第一节 矢量与分辨率
    SQL 查询当天,本月,本周的记录
    SQL创建表脚本
    varchar和Nvarchar区别
    [C#] 我的log4net使用手册
  • 原文地址:https://www.cnblogs.com/niejinmei/p/9835524.html
Copyright © 2020-2023  润新知