Предложение IN в запросе формы пони

Как я могу использовать подзапрос в форме пони для запроса типа

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

где мастер_результат

print(type(master_result))

‹'пони.orm.core.QueryResult'>


person Ganesh Jadhav    schedule 21.11.2017    source источник


Ответы (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*

person sashaaero    schedule 06.12.2017