Ответ 1
Вы можете просто вызвать filter
несколько раз:
query = meta.Session.query(User).filter(User.firstname.like(searchVar1)). \
filter(User.lastname.like(searchVar2))
Как объединить два столбца и применить фильтр? Например, я хочу одновременно выполнять поиск в столбцах "firstname" и "lastname". Вот как я это делал, если искать только один столбец:
query = meta.Session.query(User).filter(User.firstname.like(searchVar))
Вы можете просто вызвать filter
несколько раз:
query = meta.Session.query(User).filter(User.firstname.like(searchVar1)). \
filter(User.lastname.like(searchVar2))
Вы можете использовать SQLAlchemy or_
функцию для поиска в более чем одном столбце (подчеркивание необходимо, чтобы отличить его от собственного Python or
).
Вот пример:
from sqlalchemy import or_
query = meta.Session.query(User).filter(or_(User.firstname.like(searchVar),
User.lastname.like(searchVar)))
Есть несколько способов сделать это:
Использование filter()
(и оператора)
query = meta.Session.query(User).filter(
User.firstname.like(search_var1),
User.lastname.like(search_var2)
)
Использование filter_by()
(и оператора)
query = meta.Session.query(User).filter_by(
firstname.like(search_var1),
lastname.like(search_var2)
)
Цепочка filter()
или filter_by()
(и оператор)
query = meta.Session.query(User).\
filter_by(firstname.like(search_var1)).\
filter_by(lastname.like(search_var2))
Используя or_()
, and_()
и not()
from sqlalchemy import and_, or_, not_
query = meta.Session.query(User).filter(
and_(
User.firstname.like(search_var1),
User.lastname.like(search_var2)
)
)