2012-05-15 16 views
2
c.execute("UPDATE Players SET %s = %d WHERE nick=%s", 
      (parts[1], int(parts[2]), parts[0])) 

是給我的錯誤與執行參數問題鍵入MySQLdb的

TypeError: %d format: a number is required, not str 

我知道execute應該只%s,但parts[2]應強制轉換爲int,becacuse這將是一個int(輸入爲一個字符串)。

所以,如果我只放%s的,當然它想出了這個錯誤:

mysql_exceptions.ProgrammingError: (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 " 
"''wins' = '450' WHERE nick='xan'' at line 1") 

因爲wins是一個整數。 這是什麼解決方案?

回答

10

我看到一些問題。
可能有更多更詳細的信息。

  1. 您不能參數化表和列名稱。 但是,您可以進行字符串替換,然後致電.execute()
    如果您的程序需要用戶輸入,您需要警惕SQL-injection攻擊的可能性。

  2. 無論參數的類型如何,始終使用%s
    MySQLdb處理任何需要完成的引用。

實施例:

sql_stmt = "UPDATE Players SET {} = %s WHERE nick=%s;".format(parts[1]) 
c.execute(sql_stmt, (int(parts[2]), parts[0])) 
+0

由於伯尼,替換字符串,然後使用執行沒有獲得成功。 我知道sql注入,這部分軟件的使用保留給管理員! – nitrnitr

+0

乾杯,隊友。快樂的編碼。 – bernie