2012-03-31 71 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的评论

相关问题