2016-06-26 6 views
1

IN OR NOT IN 절을 쿼리에 변수로 전달하는 방법은 무엇입니까? 내가 쿼리에 변수를 전달하는 경우python을 사용하여 postgresql 쿼리에 IN 또는 NOT IN 절을 변수로 전달하는 방법

울부 짖는 소리 나는 얻을 : 따옴표의 존재에 대한 오류를 triger SELECT * FROM table_name WHERE column_name 'IN' ('product', 'category')

'IN'

query_clause = 'IN' 
##query_clause could equal 'NOT IN' 

cur = my_connection.cursor() 
cur.execute("SELECT * FROM table_name WHERE column_name %s ('product', 'category')", (query_clause,)) 

답변

4

예, 예상됩니다. 대신 부울 매개 변수를 사용하십시오.

SELECT * FROM table_name 
    WHERE (column_name IN ('product', 'category')) = %s 

그런 다음 매개 변수에 true 또는 false를 전달할 수 있습니다.

+1

오,이 사용자 입력을 위생 처리하는 훌륭한 솔루션입니다. –

+0

Dietrich에 감사드립니다! 그건 아주 식칼 솔루션 및 해결 방법입니다! 그것은 매력처럼 작동했습니다 :) – mongotop

2

당신에 대한 SQL 형식 문자열을 사용하지 못할 그 ... 그냥 일반 형식 문자열

cur.execute("SELECT * FROM table_name WHERE column_name %s ('product', 'category')"%(query_clause,)) 

주목할 가치가있는 것은 query_clause이 신뢰할 수있는 입력이라고 가정합니다. (신뢰할 수없는 입력 인 경우 주입에 대해 위생적이지 않습니다)

+0

감사합니다. 조란! 당신이 옳다면 우리는'% s'을 사용하면 SQL 인젝션을받을 수 있습니다. – mongotop

+1

ORM은 일반적으로 실제 솔루션입니다.) –