2016-11-13 9 views
0

を選択します。PythonのMYSQL私は私が動的に値を配置するクエリ機能を持つ動的な値で

query_values = { 
    "column_value": question["value"], 
    "value_2": question["value_2"], 
    "startdate": date_range["start"], 
    "enddate": date_range["end"] 
} 

query = (
     "SELECT %(column_value)s FROM ga_ad_matched_query " 
     "WHERE (ga_ad_matched_query LIKE %(value_2)s) AND " 
     "(stat_date BETWEEN %(enddate)s AND %(startdate)s)" 
    ) 
cur.execute(query, query_values) 

すべてがうまく動作しますが、私は%(column_values)変数を使用する場合、私は質問の内容を取得します["value"]を列の後ろの実際の値ではなく結果に挿入します。私が%(column_values)変数を使用せず、insted列の通常の名前を使用すると、すべて正常に機能します。 ....しかし、この関数は動的に必要なので、そこに%(column_values)を配置する必要があります。

構文上の間違いがありますか? ご協力いただきありがとうございます。

+0

クエリパラメータとして列名を使用することはできません。カラム名を自分自身でエスケープし、生のクエリ(潜在的に危険です)に挿入するか、すべてのカラムを取得して、それらのうちのいくつかだけを使用する必要があります(私はそうするでしょう)。 – lovasoa

+0

@lovasoaあなたの解決に感謝します。 Works geat! –

答えて

-1

は、文字列の構文として、より簡単なクエリを使用してみてください:

query = "SELECT %s FROM ga_ad_matched_query WHERE (ga_ad_matched_query LIKE %s) AND (stat_date BETWEEN %s AND %s)" % (colum_value, value2, enddate, startdate) 
cur.execute(query) 
+1

データベースクエリを作成するために文字列テンプレートを使用することは非常に重要です。 – lovasoa

+0

@lovasoa問題の解決策はありますか? –

+0

はい、あなたの質問にコメントを追加しました。 – lovasoa

関連する問題