2013-08-22 2 views

ответ

1

С помощью id=id вы пропускание id аргумента со значения равно id переменными. Вместо этого вам необходимо пройти условия фильтра до or_ в формате field == value.

Просто замените id=id на id==id.

0

filter_by - это всего лишь сокращенная функция, которая обеспечивает равное сравнение с помощью аргументов ключевого слова. Вместо этого почти всегда понятнее использовать filter, который позволяет выражения:

exprs = [cls.k == v for k, v in kwarg.items] 
con_session.query(cls).filter(or_(cls.id==id, and_(*exprs))).scalar() 

Метод filter_by не очень гибкий, но с выше, вы должны быть в состоянии достигнуть того же самого (непроверенные).

+0

Спасибо. Думаю, я нашел причину. or_(cls.id==id, and_(*exprs)) «id» - это аргумент ключевого слова, а аргумент and_ (* exprs) - это не ключевой аргумент, который не может после аргумента ключевого слова. – Wee

+0

Да, но если вы просто добавите знак '=', но оставьте 'filter_by', вы получите ложные результаты. Проверьте выполненный запрос. – javex

+0

да. Это другой вопрос. – Wee

Смежные вопросы