在 web2py 的 DAL 中构建复杂查询的正确方法是什么?
What is the correct way to build complex queries in web2py's DAL?
我正在使用 web2py 的 DAL 并尝试执行与此 MySQL 查询等效的操作。
SELECT header.tag, detail.site
FROM header
LEFT OUTER JOIN detail ON header.id= detail.header
WHERE header.tag IN ('abc', 'def', 'xyz')
我假设 DAL 等价物如下,但这段代码给了我一个叉积。
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;
如果我在查询中省略 belongs
子句,一切正常。
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.12.3-stable+timestamp.2015.08.18.19.14.07
您在 select
方法中缺少 left
参数。在此处查看 Left Outer Join 的文档:http://www.web2py.com/books/default/chapter/29/06/the-database-abstraction-layer#Left-outer-join
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。
我正在使用 web2py 的 DAL 并尝试执行与此 MySQL 查询等效的操作。
SELECT header.tag, detail.site
FROM header
LEFT OUTER JOIN detail ON header.id= detail.header
WHERE header.tag IN ('abc', 'def', 'xyz')
我假设 DAL 等价物如下,但这段代码给了我一个叉积。
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;
如果我在查询中省略 belongs
子句,一切正常。
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.12.3-stable+timestamp.2015.08.18.19.14.07
您在 select
方法中缺少 left
参数。在此处查看 Left Outer Join 的文档:http://www.web2py.com/books/default/chapter/29/06/the-database-abstraction-layer#Left-outer-join
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。