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