Мог любой объяснять различие между filter
и filter_by
функции в SQLAlchemy? Я смущен и не могу действительно видеть различие. Какой я должен использовать?
filter_by
используется для простых запросов на имена колонок, используя обычные kwargs, такие как
db.users.filter_by(name='Joe')
То же самое можно сделать с filter
, не используя kwargs, а используя оператор равенства '==', который был перегружен на db.users.name объекте:
db.users.filter(db.users). name=='Joe')
Также можно писать более мощные запросы, используя filter
, такие как выражения как:
db.users.filter(или_(db.users.name=='Ryan', db.users. country=='England'))
Мы на самом деле были объединены изначально вместе, то есть существовала «фильтр» -подобный метод, который принял * args
и ** Kwargs
, где вы можете пройти выражение SQL или Ключевых слов аргументов (или оба). На самом деле я нахожу, что намного удобнее, но люди всегда были запутаны этим, так как они обычно все еще превышают разницу между колонком == Expression
и ключевое слово = выражение
. Итак, мы раскладываем их.
filter_by
использует аргументы ключевого слова, тогда как filter
разрешает питонические аргументы фильтрации, такие как filter (User.name == "john")