代码之家  ›  专栏  ›  技术社区  ›  min2bro

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

  •  0
  • min2bro  · 技术社区  · 7 年前

    我正试图创建这样的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))
    

    这不起作用,我遇到了错误:

    TypeError:序列项0:应为str实例,找到元组

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

    1 回复  |  直到 7 年前
        1
  •  1
  •   CM.    7 年前

    您可以生成所需的字符串。这个错误足以说明问题。当它是 ','.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)"
    

    祝你好运