Подтвердить что ты не робот

Sqlalchemy фильтрует несколько столбцов

Как объединить два столбца и применить фильтр? Например, я хочу одновременно выполнять поиск в столбцах "firstname" и "lastname". Вот как я это делал, если искать только один столбец:

query = meta.Session.query(User).filter(User.firstname.like(searchVar))
4b9b3361

Ответ 1

Вы можете просто вызвать filter несколько раз:

query = meta.Session.query(User).filter(User.firstname.like(searchVar1)). \
                                 filter(User.lastname.like(searchVar2))

Ответ 2

Вы можете использовать SQLAlchemy or_ функцию для поиска в более чем одном столбце (подчеркивание необходимо, чтобы отличить его от собственного Python or).

Вот пример:

from sqlalchemy import or_
query = meta.Session.query(User).filter(or_(User.firstname.like(searchVar),
                                            User.lastname.like(searchVar)))

Ответ 3

Есть несколько способов сделать это:

Использование 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)
    )
)