pony orm 查询中的 IN 子句

IN clause in pony orm query

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

是的,通过 Pony API,您将从 select()filter() 函数中获得 QueryResult 对象。如果您想从该查询中获得实体,您可以更改您的行 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

另一种方法可以像 results = list(master_result) 一样将 QueryResult 转换为 list。您也可以遍历 QueryResult 对象,您将获得 Entity 对象作为项目。 for mastertable in mastertable.select(): mastertable.recordtable = *smth*