繁体   English   中英

Django数据库路由器将表发送到默认数据库,而不是正确的表

[英]Django DB Router Sending Table to default DB instead of Correct One

我正在创建一个将连接到4个数据库的站点。 我得到了前三个没有问题。 我为每个数据库创建了一个单独的应用程序,然后为每个数据库创建了一个路由器。 最后一个数据库的问题是路由器未触发。 它一直将流量发送到默认数据库。 默认数据库为app2,我要使用的数据库为“登录”。 这是我的路由器

 class LoginRouter(object):
     def db_for_read(self, model):

         if model._meta.app_label == 'Login':
             return 'Login'
         return 'default'

这是我的设置声明:

 DATABASE_ROUTERS = ['reports.dbrout.CucRouter', 'reports.dbrout.CpsgRouter', 'reports.dbrout.LoginRouter', ]

这是“登录”应用程序中未连接到正确数据库的模型。

 from __future__ import unicode_literals

 from django.db import models


 class TblUsers(models.Model):
     userid = models.AutoField(db_column='userID', primary_key=True)
     username = models.CharField(db_column='userName', max_length=100)  
     useremail = models.CharField(db_column='userEmail', unique=True, max_length=100) 
     userpass = models.CharField(db_column='userPass', max_length=100) 
     userstatus = models.CharField(db_column='userStatus', max_length=1)  
     tokencode = models.CharField(db_column='tokenCode', max_length=100)  
     companyid = models.CharField(db_column='companyID', max_length=255, blank=True, null=True)
     fk_customer = models.IntegerField(blank=True, null=True)
     is_admin = models.IntegerField(blank=True, null=True)

     class Meta:
         managed = False
         db_table = 'tbl_users'
         app_label = 'Login'

     def __str__(self):
         return str(self.userid)

完整的dbrout页:

 class CucRouter(object):
     def db_for_read(self, model):

         if model._meta.app_label == 'CUCMCDR':
             return 'CUCMCDR'
         return 'default'


  class CpsgRouter(object):
      def db_for_read(self, model):

         if model._meta.app_label == 'CPSG':
             return 'CUCMCDR'
         return 'default'


 class LoginRouter(object):
     def db_for_read(self, model):

         if model._meta.app_label == 'Login':
             return 'Login'
         return 'default'

就像我说的那样,这适用于前三个。 我在这里想念的是最后一个没有抓住的东西!! ???

路由器的处理顺序很重要。 将按照在DATABASE_ROUTERS设置中列出的顺序查询路由器。
像下面这样添加它。
DATABASE_ROUTERS = ['reports.dbrout.LoginRouter','reports.dbrout.CucRouter', 'reports.dbrout.CpsgRouter',]

虽然设置它确保您的订单,如果Login app_label在使用LoginRouterCucRouter然后LoginRouter将之前处理CucRouter

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM