2016-07-07 2 views
0

У меня есть много списков python, из которых я переношу данные в базу данных MySQL. Технически каждая переменная списка имеет по 60 значений. Но во время выполнения цикла for только одна запись обновляется вместо 60. Я использую python zip form долгое время и никогда не сталкивался с проблемой.Python zip for loop выполняется только один раз вместо 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 значений внутри него, я выполнил цикл внутри указанного цикла и распечатал его. Он отображает все 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 Внутри вышеперечисленного цикла я вставил еще один цикл как 'для элемента в lipgurl: print (item)'. Я фактически проверял случайные списки отдельно, если у них было 60 значений или нет. Итак, если я беру 1 переменную списка за раз и печатаю ее, она выдает все 60, но не в zip. То теперь исправлено, используя ответ ablove –

Смежные вопросы