2017-08-12 41 views
1

「不是所有的參數,而字符串格式化轉換」當我執行以下程序如何解決Python的錯誤

import MySQLdb 
cn = MySQLdb.connect(host="localhost", user="root", passwd="mysqlroot", 
db="sv_data") 
cursor = cn.cursor() 
cursor.execute("select addressline1, zipcode from sv_address where zipcode = '10011'") 
for (addressline1, zipcode) in cursor: 
print(addressline1, zipcode) 
cursor.close() 
cn.close() 

它工作正常。然而,當我嘗試添加一個參數查詢,如下面

import MySQLdb 
cn = MySQLdb.connect(host="localhost", user="root", passwd="****",  
db="sv_data") 
cursor = cn.cursor() 

a="10011" 
cursor.execute("select addressline1, zipcode from sv_address where zipcode = 
%s", (a)) 
for (addressline1, zipcode) in cursor: 
print(addressline1, zipcode) 

cursor.close() 
cn.close() 

收到錯誤ProgrammingError:不是字符串格式化

可以請指教如何解決這一問題過程中轉換的所有參數。我嘗試了各種選擇。 zipcode是mysqldb中的varchar字段

+0

你嘗試過嗎?''選擇addressline1,從sv_address的郵政編碼,其中zipcode ='%s''作爲查詢? –

+0

你正在追蹤什麼?在 cursor.execute –

+0

( 「選擇addressline1,從sv_address郵編其中郵政編碼= '%s' 的」 中,(a)) 文件「C:\ ProgramData \ Anaconda3 \ lib中\站點包\ MySQLdb的\ cursors.py 「,第240行,執行 self.errorhandler(self,ProgrammingError,str(m)) 文件」C:\ ProgramData \ Anaconda3 \ lib \ site-packages \ MySQLdb \ connections.py「,第52行,在defaulterrorhandler raise errorclass(errorvalue) ProgrammingError:並非在字符串格式化過程中轉換的所有參數 – Adisheshaiah

回答

2

您沒有通過參數。你寧願給它一個字符串。

試試這個。

cursor.execute("select addressline1, zipcode from sv_address where zipcode = %s" % a) 

做的最好的方法是分離你的論點和sql_query

_sql = "select addressline1, zipcode from sv_address where zipcode = {0}" 
cursor.execute(_sql.format(a)) 
+0

文檔顯示這是有效的:https://dev.mysql.com/doc/connector-python/en/connector-python-api- mysqlcursor-execute.html –

+2

謝謝。這工作。然而,有一個%是安全問題。你可以請幫忙作爲參數也 – Adisheshaiah

+1

這不應該是一個被接受的答案。這是非常不安全的。 –

1

我相信這個問題是cursor正在讀(a)只是一個字符串,並認爲在這多個值不在正在轉換(1, 0, 0, 1, 1)。所以如果你加上這樣的逗號:

cursor.execute("select addressline1, zipcode from sv_address where zipcode = %s", (a,)) 

我相信會正常工作。

例如,看看這個功能和結果:

In [28]: def t(arg): 
    ...:  print(type(arg)) 
    ...:  

In [29]: t(('a')) 
<class 'str'> 

參數不被解讀爲一個元組,它被理解爲一個字符串。