2016-08-28 4 views
0

33k 레코드 (영화)의 큰 sqlite 테이블이 있습니다. 나는 사용자가 필터를 통해 해당 테이블을 검색 할 수있는 기능을 제공하고자합니다. 각 영화 기록에는 배우, 감독, 런타임, 장르, 평점 등 10 개의 필드가 있습니다. 사용자가 사용할 수있는 유일한 필터는 사람 (배우 및 감독 포함), 장르, 등급 및 런타임입니다.동적 SQL 쿼리를 만드는 방법

문제는 사용자가 2 개 이상의 필터를 사용할 수 있기 때문에 사용할 필터를 실제로 알 수 없다는 것입니다. 필터 값은 HTTP req를 통해 처리하는 서버로 전달되고 db에서 실행할 필터를 기반으로 SQL 쿼리를 만듭니다.

내가 이해할 수없는 것은 사용되는 필터를 모르는 경우 어떻게 SQL 쿼리를 만들 수 있습니까? 사용 된 필터 만 서버로 전송되기 때문입니다.

기본적으로 각 사용자가 보낸 필터를 기반으로 SQL 쿼리를 만드는 방법을 찾고 싶습니다. 그냥 반복 Query.filter_by() 또는 Query.filter()을 적용 할 수 있습니다 당신은 필터의 목록을 제공하는 경우

답변

2

: 쿼리 끝에 만 평가하기 때문에

filters = [ 
    ('rating', 3), 
    ('runtime', 90), 
    ('genre', 'documentary') 
] 

query = session.query(Movie) 

for column, value in filters: 
    # Make sure `column` and `value` are legal values! 

    query = query.filter_by(**{column: value}) 

, 당신은 기본적으로 일을하는지 :

query = query.filter_by(...).filter_by(...) ... 

마지막 줄에서 filter_by(**{column: value})filter_by(value_of_column_variable=value)의 표기입니다.