2017-02-11 33 views
0

Мне интересно, как безопасно параметризовать динамический запрос mysql в python. По динамике я имею в виду, что он изменяется в зависимости от того, как оцениваются утверждения if.Как безопасно параметризовать динамический запрос mysql python?

Я понимаю, как параметризовать mysql-запрос в python, используя запятую, а не знак процента, как показано ниже.

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

собрать строку запроса sql с вопросительными знаками i.e. 'query = 'select * from table where thing =? и otherthing =? '", затем выполните что-то в строках' 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)