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():
  • 相关阅读:
    毕业设计:文献参考(六)
    毕业设计:文献参考(五)
    稀疏数组搜索(leetcode)
    寻找重复数(leetcode)
    联通网络的操作次数(leetcode)
    Flutter 混合开发基础
    浅谈 Serverless 开发和应用
    基于 Qt Quick Plugin 快速构建桌面端跨平台组件
    Android 设备音视频兼容性适配
    RTC 系统音频弱网对抗技术发展与实践
  • 原文地址:https://www.cnblogs.com/niejinmei/p/9835524.html
Copyright © 2011-2022 走看看