获取多个数据库的不一致?
Posted
技术标签:
【中文标题】获取多个数据库的不一致?【英文标题】:inconsistency in get for multiple databases? 【发布时间】:2011-07-31 00:39:04 【问题描述】:现在使用 Django 已经不到 1 年了,但这对我来说是新的。希望有人吗?
我要做的是从一个数据库中读取一个 Person 对象(只读/只读,最少的人员数据)来填充我的数据库(读/写,更广泛的人员信息)。
我有 2 个模型,在不同的数据库中:
每个人.py: 类人(模型。模型): emplid = models.CharField(max_length=15,primary_key=True) ...(其他字段已删除)
class Meta:
app_label = u'everyone'
db_tablespace = u'everyone'
db_table = u'people_names'
managed = False
people.py: 类人(模型。模型): emplid = models.CharField(max_length=11, db_column='emplid', primary_key=True) ...(其他字段已删除)
class Meta:
db_table = u'person'
app_label = u'commons'
db_tablespace = u'people'
第二人称模型是我的默认数据库,所以#1 是“everyone.Person”,而#2 只是“Person”。
我试过了(view.py):
try:
person = everyone.Person.objects.get(pk=emplid)
except everyone.Person.DoesNotExist: # person not found by "get"
do some stuff
finally:
do some other stuff
但 django 抱怨:全局名称 'everyone' 未定义。
如果我将“Person”替换为“everyone.Person”,则此代码有效(但我当然可以访问 错误的数据库。
当我这样做时:
person = everyone.Person.objects.get(pk=emplid)
在带有错误 empid 的命令行中,shell 正确返回
condition everyone.Person.DoesNotExist raised
我可以使用“filter”而不是“get”来解决这个问题,并处理返回的 QuerySet 对象,但我只是想知道是否有其他人注意到这一点并知道如何让“Get”在以下情况下工作访问另一个数据库。
谢谢,布赖恩
【问题讨论】:
【参考方案1】:这根本不是 Python 命名空间或多个数据库的工作方式。
如果您在同一个 models.py 文件中定义这两个 Person
类,那么第二个类会完全覆盖第一个类,而就 Python 而言,第一个类实际上并不存在。
即使它确实存在,您也不会将其称为everyone.Person
。仅当您在名为everyone.py 的模块中定义它,或者您在不同的应用程序中定义它并执行from everyone import models as everyone
时,才会出现这种情况。
【讨论】:
很抱歉没有包括那个位。这两个模型位于不同的文件中,everyone.py 和 people.py。但是,您的回复确实给了我一个有效的答案!如果我添加到我的views.py:“from commons.everyone import Person as Bob”,那么 Bob.DoesNotExist 存在。 Bingo,但我仍然说多数据库语法应该可以工作,即“everyone.Person.DoesNotExist”。以上是关于获取多个数据库的不一致?的主要内容,如果未能解决你的问题,请参考以下文章