在web2py的DAL中构建复杂查询的正确方法是什么?

时间:2015-11-30 23:15:23

标签: python-2.7 web2py

我正在使用web2py的belongs并尝试执行此MySQL查询的等效操作。

HADOOP_CLASSPATH

我认为DAL等价物如下,但是这段代码给了我一个交叉产品。

SELECT header.tag, detail.site
FROM header 
    LEFT OUTER JOIN detail ON header.id= detail.header
WHERE header.tag IN ('abc', 'def', 'xyz')

如果我从查询中省略{{3}}子句,一切正常。

tags = ['abc', 'def', 'xyz']
query = (db.header.tag.belongs(tags) & db.header.id==db.detail.header)
raw_data = db(query).select(
    db.header.tag,
    db.detail.site,
)

SELECT header.tag, detail.site FROM header, detail;

我正在使用此版本:query = (db.header.id==db.detail.header) raw_data = db(query).select( db.header.tag, db.detail.site, ) SELECT header.tag, detail.site FROM header, detail WHERE (header.id = detail.header);

2 个答案:

答案 0 :(得分:1)

您错过了left方法的select参数。在此处查看左外加入的文档:http://www.web2py.com/books/default/chapter/29/06/the-database-abstraction-layer#Left-outer-join

答案 1 :(得分:1)

query = db.header.tag.belongs(['abc', 'def', 'xyz'])
db(query).select(db.header.tag, db.detail.site,
                 left=db.detail.on(db.header.id == db.detail.header))

对我来说,请参阅http://web2py.com/books/default/chapter/29/06/the-database-abstraction-layer#Left-outer-join