2012-03-31 73 views
0

我正在使用Python來將csv行插入到SQLite數據庫中。我一直在使用它一段時間,它一直在工作。但是,對CSV文件進行了更新,但僅添加了行,而不是列。現在,當我運行代碼時,我收到「TypeError:不是在字符串格式化期間轉換的所有參數」。我嘗試了所有我能想到並發現的東西,但仍然遇到此錯誤。這是SQLite和Python,TypeError:並非所有在字符串格式化過程中轉換的參數

fin = open("file.csv", "rb") 
creader = csv.reader(fin, delimiter=',') 

sql_insert = "INSERT INTO WR_Training VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)" 

# Iterate through creader and insert the values into the table 
# Pop off the 3 resources columns and insert the others 

    for row in creader: 
     row.pop(27) 
     row.pop(26) 
     row.pop(25) 
     if row[2] != "": 
      cu.execute(sql_insert, row) 

fin.close() 
cx.commit() 
cx.close() 

最初執行該數據庫的插入部分,有29列一起的代碼,這就是爲什麼我用row.pop彈出關閉,我不想要的列,所以我也不要將它們包括在表格的原始創建中。所以它存儲了29列中的29個。我曾經使用%s而不是?對於sql命令,但是%s不工作,現在呢?不起作用。

任何建議將是非常有益的!

謝謝

+3

發表一些代碼? – kindall 2012-03-31 01:14:22

+2

你是否通過查看'len(row)'來驗證'row'是否有你認爲應該有的列數?你確定這符合SQL語句中'?'標記的數量嗎? – larsks 2012-03-31 01:32:03

+2

在執行之前嘗試'print(len(row))',以確保它與您想象的一樣長。 Python告訴你它超過26個項目。 – kindall 2012-03-31 01:32:35

回答

1
for row in creader: 
    row = row[0:29] 

    row.pop(27) 
    row.pop(26) 
    row.pop(25) 
    if row[2] != "": 
     cu.execute(sql_insert, row) 

這工作,感謝XTL的評論

相關問題