Pypika where절에 동적으로 or 조건 추가하기
MySQL테이블에서 데이터를 조회하는 쿼리를 만들어 실행하고, 그 결과값을 반환하는 함수를 만들고자 한다.
조건
1. 조회하고 싶은 컬럼은 columns로 입력 받되, 입력값이 없으면(*) 모든 컬럼을 조회한다
2. data_idx로 데이터를 조회해오며, 키워드가 있을 수도, 없을 수도 있다.
2번 조건때문에 고민을 했던 지라 이렇게 글을 남긴다.
코드
from pypika import Table, EmptyCriterion, MySQLQuery as Query
def get_data(data_idxs, keyword_includes=None, keyword_excludes=None, columns=None):
if not data_idxs:
print('잘못된 입력 (data_idxs 는 필수 입력 사항)')
raise Exception()
connection_string = 'mysql+pymysql://{}:{}@{}:{}'.format(id, password, ip, port) #각 서버 정보 입력
engine = create_engine(connection_string)
conn = engine.connect()
my_table = Table('table_name')
query = Query.from_(my_table)
if columns:
for column in columns:
query = query.select(column)
else:
query = query.select('*')
criterions = EmptyCriterion()
if keyword_includes:
for keyword in keyword_includes:
criterions |= (my_table.content.like('%{}%'.format(keyword)))
if keyword_excludes:
for keyword in keyword_excludes:
criterions |= (my_table.content.not_like('%{}%'.format(keyword)))
if len(criterions.tables_) != 0:
query = query.where(criterions)
return conn.execute(query)