2017-07-26 92 views
0

我想創建一個簡單的腳本來改變一些mysql數據,但我對參數化查詢有點困惑。代碼如下所示:Python - MySQLdb參數化查詢

reader_id = sys.argv[1] 
cmd_id = sys.argv[2] 

conn = mysql.connect(user='...', passwd='...', host='...', db='...') 
curs = conn.cursor() 

mysql_data = { 
    "reader_id": int(reader_id), 
    "cmd_id": int(cmd_id) 
} 

curs.execute("UPDATE `reader_config_hw` SET `changed_` = '1' " 
      "WHERE `object_id` = %(reader_id)d AND `id` = %(cmd_id)d;", mysql_data) 

curs.execute("UPDATE `reader` SET `check_for_command` = '1' WHERE `id` = %(reader_id)d", mysql_data) 

和錯誤的結果是

Traceback (most recent call last): 
    File "./main.py", line 25, in <module> 
    "WHERE `object_id` = %(reader_id)d AND `id` = %(cmd_id)d;", mysql_data) 
    File "/usr/lib64/python3.6/site-packages/MySQLdb/cursors.py", line 210, in execute 
    query = query % args 
TypeError: %d format: a number is required, not str 

它說,這個數字是必需的,但我已經通過int(reader_id)改變了變量的類型,是不是?

回答

1

嘗試改變 "WHERE 'object_id' = %(reader_id)d AND 'id' = %(cmd_id)d;"

"WHERE 'object_id' = %(reader_id)s AND 'id' = %(cmd_id)s;"

我認爲 'd' 您的變量調用後表示 「數字」,而你需要使用一個字符串。

編輯:澄清,字符串可以替代在MySQL整數使用查詢

+0

這工作,我已經嘗試過這種解決方案。問題是,當使用'%(變量)s'時,我使用的IDE(pyChram)在分析SQL查詢時抱怨。另外我想解釋爲什麼會發生這種情況。 – sukovanej

+0

啊,gotcha。不幸的是,我不熟悉pyCharm。希望你很快得到解決方案!對不起,我不能有更多的幫助:( – nat5142