2

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

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

2 回答 2

4

通过“Newdata 是 x 列的列表”,我想你的意思是x tuples,从那以后你继续说“第一个元组”。IfNewdata是一个元组列表,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)

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

于 2010-09-17T03:55:03.197 回答
0

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

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

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

并不是说我确定你正在尝试什么会起作用,但是插入语句会变成:

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

于 2010-09-17T03:30:21.403 回答