在列表中连接元组而不将它们转换为 Str

Joining tuples within a list without converting them to Str

我正在尝试创建这样的 Mysql 插入查询以插入数百万条记录:

INSERT INTO mytable (fee, fi) VALUES 
   ('data1',96)
  ,('data2',33)
  ,('boot',17) 

我的值作为元组存储在列表中:

datatuplst = [("data1",96), ("data2", 33),("data3", 17)]

我的代码:

c3 = con.cursor()
c3.execute("INSERT INTO `bigdataloadin` (`block_key`, `id`) VALUES %s" %','.join(datatuplst))

这不起作用,我收到错误消息:

类型错误:序列项 0:预期的 str 实例,已找到元组

需要有关如何使用存储在元组列表中的值创建动态查询的帮助。

您可以生成您需要的字符串。这个错误已经足够解释了。当它是 ','.join(datatuplst) 时,解释器被迫加入元组。所以使用列表理解你可以这样说:

','.join([str(el) for el in datatuplst])

此语句的输出将是:"('data1', 96),('data2', 33),('data3', 17)"

那么您的实际 INSERT 语句将被解释如下:

"INSERT INTO `bigdataloadin` (`block_key`, `id`) VALUES ('data1', 96),
('data2', 33),('data3', 17)"

祝你好运!