web-dev-qa-db-ja.com

sqlalchemyフィルター複数の列

2つの列を結合してフィルターを適用するにはどうすればよいですか?たとえば、「firstname」列と「lastname」列の両方を同時に検索したいです。 1列のみを検索する場合の方法を次に示します。

query = meta.Session.query(User).filter(User.firstname.like(searchVar))
52
teggy

SQLAlchemyの or_ function 複数の列を検索するには(Pythonのorと区別するためにアンダースコアが必要です)。

以下に例を示します。

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

単にfilterを複数回呼び出すことができます:

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

それを行う方法はいくつかあります。

filter()の使用(and演算子)

_query = meta.Session.query(User).filter(
    User.firstname.like(search_var1),
    User.lastname.like(search_var2)
    )
_

filter_by()の使用(and演算子)

_query = meta.Session.query(User).filter_by(
    firstname.like(search_var1),
    lastname.like(search_var2)
    )
_

チェーンfilter()またはfilter_by()and operator)

_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)
    )
)
_
39
Vlad Bezden