我想问一下Django的简单连接技术

时间:2010-11-25 07:30:30

标签: mysql database django django-models

很抱歉,我是Django的新手。所以,我在加入两个表的简单查询时遇到了麻烦。假设我有两个具有一对一关系的表调用“table1”和“table2”: 表1(FIELDA,fieldB,fieldC) 表2(FIELDA,fieldC,fieldZ)

我想获得像

这样的查询结果
SELECT T1.fieldA,fieldB,fieldC,fieldZ FROM table1 as T1, table2 as T2 WHERE T1.fieldA=T2.fieldA

我怎样才能在Django中这样做?

提前致谢。

2 个答案:

答案 0 :(得分:0)

未经测试的代码,写在火车上的早期通勤发呆中,但这应该有效:

results = Table1Model.objects.filter(fieldA__in = Table2Model.objects.all().values_list('fieldA',flat=True))

这将获得相关Table1ModelObjects的查询集。如果您只想要这些值,请在上面的最后一个括号后面添加:

.values_list('fieldA','fieldB','fieldC','fieldZ', flat=True)

或者,而不是所有这些,请记住,您可以回退到原始SQL:

results = Table1Model.objects.raw("SELECT T1.fieldA,fieldB,fieldC,fieldZ 
                                   FROM table1 as T1, table2 as T2 
                                   WHERE T1.fieldA=T2.fieldA")

它也会给你回来的对象(假设你正在使用Django 1.2)。如果您只想要值,请从上面添加values_list位,或者查看queryset reference

中的extra()

答案 1 :(得分:0)

您可以使用extra()隐式进行加入:

Table1Model.objects.extra(
    tables=['table2'],
    where=['table1.fieldA = table2.fieldA']
)