2016-07-07 518 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形式打印。多數民衆贊成現在糾正使用自由答案 –