2016-04-30 9 views
0

私はすでにこれに関連する質問をチェックしましたが、私の問題で私を助けている何かを見つけることができないようです。分散型変数を使用したMySQLクエリの正しい形式は何ですか?

# this is the code that comes before the mysql query 
    select = request.args['select'] 
    print select # ["c9", "TEMP"] 
    c, conn = connection() 
    print "connected" 

私はこのクエリを実装した後、それは

data = c.execute("SELECT Client, %s, Date_Time FROM data WHERE Client = %s and Date_Time > '2016-04-26 18:17:15'", (select[1],select[0])) 
# prints data = 0 

はこの1つは、何もデータがここなどから生成されていない

data = c.execute("SELECT Client, '%s', Date_Time FROM data WHERE Client = '%s' and Date_Time > '2016-04-26 18:17:15';", (select[1],select[0])) 
# (1064, 'You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near \'\\"\'\', Date_Time FROM data WHERE Client = (\'[\') and Date_Time > \'2016-04-26 18:17\' at line 1') 

私のSQLクエリでエラーが発生し、任意のデータを生成しません。よく

data = c.execute("SELECT Client, '%s', Date_Time FROM data WHERE Client = %s and Date_Time > '2016-04-26 18:17:15';", (select[1],select[0])) 
# prints data = 0 

しかし、このコマンドを入力するだけで動作します(変数なし)

data = c.execute("SELECT Client, TEMP, Date_Time FROM data WHERE Client = 'c9' and Date_Time > '2016-04-26 18:17:15';") 

私のエラーはどこですか? :/

答えて

2

カラムリストではパラメータ置換を使用できません。そこに通常のPython文字列フォーマットを使用する必要があります。

c.execute("SELECT Client, {}, date_Time FROM data WHERE Client = %s and Date_Time > '2016-04-26 18:17:15'".format(select[1]), select[0]) 
+0

私はこのエラーを受け取りましたが、このエラーは(1064、 'あなたのSQL構文に誤りがあります。正しい構文についてはMySQLサーバのバージョンに対応するマニュアルをチェックしてください。 \ '、date_Time FROM data WHERE Client = \' [\ 'とDate_Time> \' 2016-04-26 18:17:15 \ '\' 1行目で) 'IDK why!l –

+0

最後のコメントを無視してください、boss。 'select = request.args ['select']'という行は値を文字列で返しますので、 'ast'ライブラリを使ってこれを修正しなければなりません。すべての引数は文字列書式中に変換されました 'まだ作業中です:)! –

+0

' c.execute( "SELECTクライアント、{}、date_Time FROMデータWHEREクライアント=%sおよびDate_Time> '2016-04-26 18:17:15' ".format([1]を選択)、[[0]を選択)最後にブラケットを追加して機能させるには、ボス。他の人にも答えを編集してください。 :) –

関連する問題