如何在pony orm中使用子查询进行查询,如
SELECT *
FROM child_table
WHERE child_table.masterno IN (SELECT masterno
FROM mastertable
WHERE mastertable.recorddate > SYSDATE -1)
换句话说。我想做像
这样的事情master_result = target_model.mastertable.select()\
.filter(lambda mt: mt.recorddate > DATE)
output = target_model.child_table.select()\
.filter(lambda ct: ct.masterno in master_result)
我收到了错误
pony.orm.sqltranslation.IncomparableTypesError: Incomparable types 'int' and 'mastertable' in expression: ct.masterno in master_result
其中master_result是
print(type(master_result))
< 'pony.orm.core.QueryResult' >
答案 0 :(得分:0)
是的,通过Pony API,您将从QueryResult
和select()
函数获得filter()
个对象。如果您想拥有该查询中的实体,则可以更改您的行
master_result = target_model.mastertable.select()\
.filter(lambda mt: mt.recorddate > DATE)
至
master_result = target_model.mastertable.select()\
.filter(lambda mt: mt.recorddate > DATE)[:] <- this will fetch objects
您可以将QueryResult
转换为list
的另一种方式,例如results = list(master_result)
。您还可以迭代QueryResult对象,并将Entity对象作为项目。
for mastertable in mastertable.select():
mastertable.recordtable = *smth*