2010-09-17 44 views
2

如果Newdata是x列的列表,将如何获得数字唯一列 - 第一个元组的成员数。 (Len不重要。)改变“?”的数量匹配列并使用下面的语句插入。使用Python将许多列快速插入到Sqlite Mysql

csr = con.cursor() 
csr.execute('Truncate table test.data') 
csr.executemany('INSERT INTO test.data VALUES (?,?,?,?)', Newdata) 
con.commit() 

回答

3

通过“Newdata为x列清单”,我想你的意思是x元组,从此以后你继续讲“第一元组”的。如果Newdata是元组列表,则y = len(Newdata[0])是这些元组中第一个元素的项目数。

假设这是你想要的数量(以及所有元组最好有相同数量的项目,否则executemany失败!),在@弥敦道的回答的总体思路是正确的:有适当数量的建立字符串逗号分隔问号:

holders = ','.join('?' * y) 

然后将其插入到SQL语句的其余部分。 @弥敦道的方式接入是适合大多数的Python版本凡因,但如果你有2.6或更好,

sql = 'INSERT INTO testdata VALUES({0})'.format(holders) 

目前是首选(它也可以在Python 3.any)。

最后,

csr.executemany(sql, Newdata) 

会做你的愿望。记住一旦完成就完成交易! - )

0

如果你正在寻找的项目在Newdata所有元素的最大数目,它只是:

num_columns = max(len(t) for t in Newdata) 

这当然,假定蟒蛇2.5或更高版本。

不,我敢肯定,你会尝试什么工作,但随后的INSERT语句会成为:

SQL = “INSERT INTO test.data VALUES(%S)” % “” 加盟(“?” * NUM_COLUMNS)