使用Python快速将许多列插入Sqlite \ Mysql

时间:2010-09-17 03:27:07

标签: python mysql sqlite python-db-api

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

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

2 个答案:

答案 0 :(得分:3)

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

假设这是你想要的数字(并且所有元组最好具有相同数量的项目,否则executemany 失败!),@ Nathan的答案中的一般想法是正确的:使用适当数量的逗号分隔的问号构建字符串:

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

然后将其插入SQL语句的其余部分。 @ Nathan的插入方式适用于大多数Python 2.any版本,但如果您有2.6或更高版本,

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

目前是首选(它也适用于Python 3.any)。

最后,

csr.executemany(sql, Newdata)

会做你想做的事。记得在完成后提交交易! - )

答案 1 :(得分:0)

如果您要查找Newdata中所有元素的最大项目数,则只需:

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

当然,这假定为python 2.5或更高版本。

并不是说我确定你的尝试会起作用,但插入语句将成为:

sql =“INSERT INTO test.data VALUES(%s)”%“,”。join('?'* num_columns)