2つの列を結合してフィルターを適用するにはどうすればよいですか?たとえば、「firstname」列と「lastname」列の両方を同時に検索したいです。 1列のみを検索する場合の方法を次に示します。
query = meta.Session.query(User).filter(User.firstname.like(searchVar))
SQLAlchemyの or_
function 複数の列を検索するには(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(searchVar1)). \
filter(User.lastname.like(searchVar2))
それを行う方法はいくつかあります。
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)
)
)
_