2017-02-11 3 views
0

私は動的にMySQLのクエリをPythonで安全にパラメータ化する方法を知っています。動的では、if文がどのように評価されるかによって変化します。ダイナミックなpython mysqlクエリを安全にパラメータ化するにはどうすればよいですか?

私は、次のように、パーセント記号ではなくカンマを使用して、Pythonで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) 
関連する問題