Django 数据库路由器将 Table 发送到默认数据库而不是正确的数据库
Django DB Router Sending Table to default DB instead of Correct One
我正在创建一个将连接到 4 个数据库的站点。我得到前三个没问题。我为每个数据库创建了一个单独的应用程序,然后为每个数据库创建了一个路由器。最后一个数据库的问题是路由器没有触发。它不断将流量发送到默认数据库。
默认的db是app2,我要用的db是'Login'。
这是我的路由器
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', ]
这是 'Login' 应用程序中未连接到正确数据库的模型。
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 在 LoginRouter
和 CucRouter
中使用,则 LoginRouter
将在 [=14] 之前处理=]
我正在创建一个将连接到 4 个数据库的站点。我得到前三个没问题。我为每个数据库创建了一个单独的应用程序,然后为每个数据库创建了一个路由器。最后一个数据库的问题是路由器没有触发。它不断将流量发送到默认数据库。 默认的db是app2,我要用的db是'Login'。 这是我的路由器
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', ]
这是 'Login' 应用程序中未连接到正确数据库的模型。
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 在 LoginRouter
和 CucRouter
中使用,则 LoginRouter
将在 [=14] 之前处理=]