Это синтаксический сахар для более быстрого написания запросов. Его реализация в псевдокоде:
def filter_by(self, **kwargs):
return self.filter(sql.and_(**kwargs))
Для AND вы можете просто написать:
session.query(db.users).filter_by(name='Joe', surname='Dodson')
кстати
session.query(db.users).filter(or_(db.users.name=='Ryan', db.users.country=='England'))
можно записать как
session.query(db.users).filter((db.users.name=='Ryan') | (db.users.country=='England'))
Также вы можете получить объект напрямую по PK с помощью get
метода:
Users.query.get(123)
# And even by a composite PK
Users.query.get(123, 321)
При использовании get
case важно, чтобы объект можно было возвращать без запроса к базе данных из identity map
, который можно использовать как кэш (связанный с транзакцией)