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

时间:2011-04-06 17:08:29

标签: django django-views

使用Django for< 1yr现在,但这个是新的我。希望有人吗?

我要做的是从一个数据库中读取一个Person对象(只读/最小人数)来填充我的数据库(r / w,更广泛的Person信息)。

我有两个模型,在不同的dbs中:

everyone.py:     class Person(models.Model):         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:
    class Person(models.Model):         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只是“人物”。

我试过(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抱怨:全球名称“每个人”都没有定义。

如果我将“Person”替换为“everyone.Person”,则此代码有效(但我当然可以访问 错误的数据库。

当我这样做时:

person = everyone.Person.objects.get(pk=emplid)

在命令行中有一个错误的emplid,shell正确返回

condition everyone.Person.DoesNotExist raised

我可以使用“filter”而不是“get”来解决这个问题,并处理返回的QuerySet对象,但我只是想知道是否有其他人注意到这一点并且知道如何让“Get”在以下情况下工作访问另一个数据库。

thx,Brian

1 个答案:

答案 0 :(得分:0)

这不是Python命名空间或多个数据库的工作方式。

如果你在同一个models.py文件中定义了这两个Person类,那么第二个完全覆盖第一个,并且就Python而言,第一个实际上并不存在。< / p>

即使确实存在,也不会将其称为everyone.Person。如果您在名为everyone.py的模块中定义它,或者您在另一个应用程序中定义它并执行from everyone import models as everyone,则情况就是这样。