두 개의 열을 결합하고 필터를 적용하려면 어떻게합니까? 예를 들어 “이름”과 “성”열을 동시에 검색하려고합니다. 하나의 열만 검색하는 경우 다음과 같이합니다.
query = meta.Session.query(User).filter(User.firstname.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)
)
)
답변
간단히 filter
여러 번 호출 할 수 있습니다 .
query = meta.Session.query(User).filter(User.firstname.like(searchVar1)). \
filter(User.lastname.like(searchVar2))
답변
SQLAlchemy의 or_
함수 를 사용 하여 둘 이상의 열에서 검색 할 수 있습니다 (파이썬의 열과 구별하기 위해 밑줄이 필요합니다 or
).
예를 들면 다음과 같습니다.
from sqlalchemy import or_
query = meta.Session.query(User).filter(or_(User.firstname.like(searchVar),
User.lastname.like(searchVar)))
답변
여러 열에 대해 작동하는 일반적인 코드입니다. 응용 프로그램에서 검색 기능을 조건부로 구현해야하는 경우에도 사용할 수 있습니다.
search_key = "abc"
search_args = [col.ilike('%%%s%%' % search_key) for col in ['col1', 'col2', 'col3']]
query = Query(table).filter(or_(*search_args))
session.execute(query).fetchall()
참고 :는 %%
쿼리 형식화를 건너 뛰는 것이 중요합니다.
답변
