2017-07-28 57 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),)) 
相关问题