2017-07-28 95 views
0

我試圖從列表中插入每個值到數據庫使用python,mysql數據庫和mysqldb。數據庫中此列表中所有元素的類型均爲VARCHAR。從列表中插入元素到MySQL數據庫時的TypeError

但我發現了這個錯誤:

類型錯誤:不串轉換過程中的所有參數格式

列表內涵是去除空字符串,以試圖解決這個問題,目前我已經試圖將每個元素轉換爲一個字符串,但它沒有奏效。我也試過將它轉換爲查詢函數中的字符串,但是還沒有工作。

值-3.89738e-05

類型(值) 「類型 'STR'」

for scan in outer: 
    scan = [str(x) for x in scan if x] 
    for value in scan: 
     print value 
     print type(value) 
     sql_insert = ('INSERT INTO langmuir_data(currentI)' 
         'VALUES("%s")') 
     cursor.execute(sql_insert, str(value)) 

任何人都知道爲什麼我收到此錯誤,以及如何解決它?

+2

如果您的查詢'sql_insert = 「」 「INSERT INTO langmuir_data(currentI)VALUES(%S)」 「」'和'光標.execute(sql_insert,(str(value),))'會發生什麼? – roganjosh

+0

發生同樣的事情,兩者都是有效的語法。我之前已經成功地使用過該語法,並且在此程序中的其他程序和其他列表中使用了 –

+1

那麼,在SQL中,我已經使用過它們會做不同的事情,因爲您沒有將參數作爲元組傳遞。你複製/粘貼我寫的兩行文字? – roganjosh

回答

1

當你執行你的參數化查詢時,它期望參數被傳遞給一個可迭代的元組(我把它放在我的評論中)。當你傳遞多個參數時,你會看到沒有問題,因爲它會將這些參數解壓到你提供的佔位符中。但是,當您傳遞單個字符串時,仍然可以在Python中進行迭代,因此它會嘗試將該字符串逐字符地插入到準備好的語句中。

for item in ('abc',): 
    print item # prints whole string, for which you provided a placeholder 

for item in 'abc': 
    print item # prints the individual letters, but you only gave 1 placeholder 

所以,你應該使用以下命令:

cursor.execute(sql_insert, (str(value),)) 
相關問題