sqlalchemy 여러 열 필터링 “성”열을 동시에 검색하려고합니다. 하나의 열만

두 개의 열을 결합하고 필터를 적용하려면 어떻게합니까? 예를 들어 “이름”과 “성”열을 동시에 검색하려고합니다. 하나의 열만 검색하는 경우 다음과 같이합니다.

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()

참고 :는 %%쿼리 형식화를 건너 뛰는 것이 중요합니다.


답변