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))
SQLChemy의 함수를 사용하여 둘 이상의 열에서 검색할 수 있습니다(Python의 자체 열과 구분하려면 밑줄이 필요함).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()
참고: 더%%
% 형식 지정을 건너뛰는 것이 중요합니다.
필터가 전체 이름에 대해 작동하도록 하려면 쿼리를 수정하여concat
데이터베이스 엔진에서 제공하는 기능입니다.다음은 코드를 업데이트하여 코드가 작동하도록 만드는 방법의 예입니다.
from sqlalchemy import func
query = meta.Session.query(User).filter(func.concat(User.firstname, ' ', User.lastname).contains(searchVar))
언급URL : https://stackoverflow.com/questions/3332991/sqlalchemy-filter-multiple-columns
'programing' 카테고리의 다른 글
python distutils 설치 방법 (0) | 2023.07.28 |
---|---|
MySQL 성능 - "IN" 절 vs.단일 값에 대해 동일(=) (0) | 2023.07.23 |
MySQL InnoDB: 'FOR UPDATE'와 'LOCK IN SHARE MODE'의 차이점 (0) | 2023.07.23 |
MariaDB의 IN 문에 잘못된 결과가 있습니까? (0) | 2023.07.23 |
두 개의 서로 다른 쿼리를 하나의 결과로 오라클 SQL로 출력 (0) | 2023.07.23 |