【问题标题】:I would like to ask about simple joining technique for Django我想问一下Django的简单加入技术
【发布时间】:2010-11-25 07:30:29
【问题描述】:

对不起,我是 Django 的新手。所以,我在连接两个表的简单查询方面遇到了麻烦。假设我有两个具有一对一关系的表调用“table1”和“table2”: 表 1(字段 A、字段 B、字段 C) table2(fieldA,fieldC,fieldZ)

我想得到类似的查询结果

SELECT T1.fieldA,fieldB,fieldC,fieldZ FROM table1 as T1, table2 as T2 WHERE T1.fieldA=T2.fieldA

如何在 Django 中做到这一点?

提前致谢。

【问题讨论】:

  • 你的模型是如何指定的?
  • 是的,你需要从模型和 Django 的 ORM 的角度开始思考,而不是纯粹在数据库表中——这样你会从 ORM 中获得更多的东西

标签: mysql database django django-models


【解决方案1】:

未经测试的代码,在火车上早早的通勤发呆中编写的,但这应该可以工作:

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()

【讨论】:

    【解决方案2】:

    您可以使用extra() 进行隐式连接:

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

    【讨论】:

    • 谢谢。我现在弄清楚这是如何工作的.. 再次感谢.. :)
    猜你喜欢
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-31
    相关资源
    最近更新 更多