【问题标题】: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”在以下情况下工作访问另一个数据库。

谢谢,布赖恩

【问题讨论】:

    标签: django django-views


    【解决方案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”。
    猜你喜欢
    • 2020-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-07
    • 2018-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多