2016-07-07 520 views
0

我有很多python列表,我正在将这些数据传输到MySQL数据库。 从技术上讲,每个列表变量每个都有60个值。但是在执行for循环时,只有1条记录被更新而不是60条。我使用python zip格式很长一段时间,并且从来没有遇到过问题。Python zip for循环只执行一次而不是60次

flg=1 
prodcat="sac" 

for a,b,c,d,e,f,g,h,o,p,q,r,s,t,ab,ac,ad,ae,af,ag,ah,ai,aj,ak,al,am,an,ao,ap,aq,ar,as1,at1,au in zip(lipgurl,lipdate,lides,liref,liname,licontry,listype,liprice,licurcy,lim,licolor,licond,lisize,liwidth,liheight,lidepth,liwish,limsg,liselracc,librand,liuoid,lifolby,lifolwing,lilikes,lisolddt,libuyer,liusprice,lipbought,libuyernm,libuyacc,libuycont,libuytype,liselrid,lisrcpage): 
    myid="VC"+str(flg) 
    cur.execute("INSERT INTO details VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)",(myid,a,au,ag,rdate,b,prodcat,c,d,e,at1,f,g,h,o,an,p,q,r,s,t,ab,ac,ad,ae,af,ai,aj,ak,al,am,ao,ap,aq,ar,as1)) 
    flg=flg+1 
    print("Database updated") 
con.commit() 

为了检查每个列表变量是否在其内具有60个值,我insterted上述循环和印刷里面的循环。它打印出所有60个值。

我哪里错了?有什么建议么?

回答

2

很可能是因为与中只有一个元素的列表,所以拉链回报的项目只有一个元组,采用itertools.zip_longest代替拉链应该解决您的问题(你会得到物品的软垫拉链...):

from itertools import zip_longest 


flg=1 
prodcat="sac" 

for a,b,c,d,e,f,g,h,o,p,q,r,s,t,ab,ac,ad,ae,af,ag,ah,ai,aj,ak,al,am,an,ao,ap,aq,ar,as1,at1,au\ 
     in zip_longest(lipgurl,lipdate,lides,liref,liname,licontry,listype,liprice,licurcy,lim, 
         licolor,licond,lisize,liwidth,liheight,lidepth,liwish,limsg,liselracc,librand, 
         liuoid,lifolby,lifolwing,lilikes,lisolddt,libuyer,liusprice,lipbought,libuyernm, 
         libuyacc,libuycont,libuytype,liselrid,lisrcpage): 
    myid="VC"+str(flg) 
    cur.execute("INSERT INTO details VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)",(myid,a,au,ag,rdate,b,prodcat,c,d,e,at1,f,g,h,o,an,p,q,r,s,t,ab,ac,ad,ae,af,ai,aj,ak,al,am,ao,ap,aq,ar,as1)) 
    flg=flg+1 
    print("Database updated") 
con.commit() 
+0

@Andriy谢谢你!有效!。我从来不知道这样的事情存在。在Python 3中只有一个更正,而不是izip_longest,我们使用zip_longest。我想知道谁低估了你的答案!如果我有名誉,我就会高兴起来。 –

+0

@Ro_nair,你的问题明确说明*为了检查每个列表变量是否有60个值,我在上面的循环中插入一个循环并打印。它打印出所有60个值。*,如果你有全部60个值,怎么会有59个失踪? –

+0

@PadraicCunningham在上面的循环中,我插入另一个循环作为'for item in lipgurl:print(item)'。如果他们有60个值或者没有,我实际上单独检查了随机列表。所以,如果我每次取1个列表变量并打印出来,它会打印出全部60个,但不是以zip形式打印。多数民众赞成现在纠正使用自由答案 –