我有一个包含13个列表的压缩列表。我想将这些项插入到mysql数据库中。这是我的代码:
zipped_list=zip(list1,list2...list13)
for a,b,c,d,e,f,g,h,i,j,k,l,m in zipped_list:
cur.execute("INSERT INTO QB_global_sentiment(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s) VALUES('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')" %("date","US_pos","US_neg","US_neu","UK_pos","UK_neg","UK_neu","CA_pos","CA_neg","CA_neu","AU_pos","AU_neg","AU_neu",str(m), str(a),str(b),str(c),str(d),str(e),str(f),str(g),str(h),str(i),str(j),str(k),str(l)))
这是我的错误:
for a,b,c,d,e,f,g,h,i,j,k,l,m in zipped_list:
ValueError: too many values to unpack
我同意项目太多而且它真的很长......有更好的方法吗?
谢谢!
答案 0 :(得分:2)
听起来你有一个包含13个列表的列表,并希望并行迭代。为此,您可以使用zip()
,如下面的简单示例所示:
In [8]: l = [[1, 2, 3], [4, 5, 6]]
In [9]: for a, b in zip(*l):
...: print a, b
...:
1 4
2 5
3 6
答案 1 :(得分:2)
我同意项目太多而且很长。
这个消息并不意味着“超过x数是一个坏主意”意义上的“太多”。从拉链元素的数量意义上说,“太多”意味着与变量的数量不匹配。
FWIW,您不需要解压缩到单独的变量( execute()方法将接受元组或列表),也不需要有for循环( > executemany()方法会为你做这个)。此外, execute()方法将进行替换,具有以下几个优点:帮助避免SQL注入攻击,提高速度和提高清晰度。
尝试以下几点:
cur.executemany('''INSERT INTO QB_global_sentiment(date, US_pos, US_neg, US_neu, UK_pos, UK_neg, UK_neu, CA_pos, CA_neg, CA_neu, AU_pos, AU_neg , AU_neu)
VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)''', combined_data)
答案 2 :(得分:0)
<强>建议强>
如果值将在运行时更改,您可能需要对它们进行硬编码,而不是填充它们。
最好用迭代中返回的项目中的项目数来解决问题。
如果我是你,我会这样做
for row in zipped_list:
print ("...{} {} {} {}".format(*row[:4])
这会从zipped_list
获取列表/元组,它只使用您想要实际填充的列数。
示例:强>
data = [[1, 2, 3], [4, 5, 6]]
for a in data:
print("{} {}".format(*a[:2]))
<强>输出强>
1 2
4 5