1

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

4

1 回答 1

1

是的,通过 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*

于 2017-12-06T00:28:39.180 回答