小马orm查询中的IN子句

时间:2017-11-21 15:23:39

标签: python ponyorm

如何在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' >

1 个答案:

答案 0 :(得分:0)

是的,通过Pony API,您将从QueryResultselect()函数获得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*