获取多个数据库的不一致?

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”。

以上是关于获取多个数据库的不一致?的主要内容,如果未能解决你的问题,请参考以下文章

Mysql数据库显示时间与应用程序获取到的不一致的问题

Mysql数据库显示时间与应用程序获取到的不一致的问题

Mysql数据库显示时间与应用程序获取到的不一致的问题

Mysql数据库显示时间与应用程序获取到的不一致的问题

SpringMVC:取决于 url 扩展的不一致映射行为

C# 中插入符号位置、字符串长度和匹配索引的不一致