2017-02-11 3 views
0

파이썬에서 동적 인 mysql 쿼리를 안전하게 매개 변수화하는 방법에 대해 궁금합니다. 동적 인 경우 if 문이 평가되는 방식에 따라 변경된다는 것을 의미합니다.어떻게 동적으로 파이썬 mysql 쿼리를 안전하게 매개 변수화합니까?

필자는 파이썬에서 mysql 쿼리를 매개 변수화하는 방법을 다음과 같이 백분율 기호 대신 쉼표를 사용하여 이해합니다.

c.execute("SELECT * FROM foo WHERE bar = %s AND baz = %s", (param1, param2)) 

다음은 '동적 쿼리'의 예입니다. 백분율 기호를 사용하는 것보다 더 안전한 방법을 찾고 있습니다.

def queryPhotos(self, added_from, added, added_to): 
     sql = "select * from photos where 1=1 " 
     if added_from is not None: 
      sql = sql + "and added >= '%s' " % added_from 
     if added is not None: 
      sql = sql + "and added = '%s' " % added 
     if added_to is not None: 
      sql = sql + "and added <= '%s' " % added_to 

통찰력 부탁드립니다.

+0

물음표 ('query ='select * from table where thing =?)를 사용하여 sql 쿼리 문자열을 조합하십시오. 및 기타 =? "'c.execute (query, [param1.param2]) 행을 따라 뭔가를하십시오. – Nullman

답변

0

@ Nullman 덕분에 대답을했습니다.

def queryPhotos(self, added_from, added, added_to): 
     vars = [] 

     sql = "select * from photos where 1=1 " 
     if added_from is not None: 
      sql = sql + "and added >= %s " 
      vars.append(added_from) 
     if added is not None: 
      sql = sql + "and added = %s " 
      vars.append(added) 
     if added_to is not None: 
      sql = sql + "and added <= %s " 
      vars.append(added_to) 

     vars = tuple(vars) 

     results = c.execute(sql, vars) 
관련 문제