2015-07-12 37 views
1

有人可以幫我弄清楚下面的代碼有什麼問題。這是一個的嘗試使用Connector/Python連接器/ Python選擇語句不起作用

number = '+12345678901' 
cursor.execute('SELECT * FROM channel WHERE phone_number = %s', (number)) 

它產生以下錯誤一個MySQL數據庫中選擇一個Python應用程序:

1064 (42000): 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 '%s' at line 1

當我檢查MySQL的日誌,我看到以下內容:

SELECT * FROM channel WHERE phone_number = %s

這意味着它並不代替電話號碼。

回答

6

根據Python Database API參數應提供作爲序列或映射(number)既不是一個。

要創建單個元素元組,您需要元素後面的逗號。

cursor.execute('SELECT * FROM channel WHERE phone_number = %s', (number,)) 
+0

順便說一句,我想你也可以更換也使用python的字符串。例如,'SELECT * FROM channel WHERE phone_number =%s'%(number)' – mohit

+1

@mohit容易受到sql注入攻擊。 SQL查詢字符串不應以這種方式連接。 – Kes115

-1

的str.format()方法現在使用的就地%s的

number = '+12345678901' 
    cursor.execute('SELECT * FROM channel WHERE phone_number = {}').format(number)) 

約python2.6的十歲上下正巧,看到https://docs.python.org/2/library/string.html?highlight=string.format#format-string-syntax

+0

這是將mysql驅動程序語句插值與python插值相混合。如果你用這種方式插入查詢(python而不是SQL),你會打開自己的SQL注入攻擊。 –