在python中解包大列表

问题描述

我必须打开这个大列表并将每个项目放入数据库。 除了这些数据外,一切都很好。

我试过:

([styles],[seasons],[day],[id]) = search_

但我收到这样的错误

exception=ValueError('too many values to unpack (expected 4)')>

我使用这样的查询

insert= "INSERT INTO cantina (styles,seasons,day,id) VALUES (?,?,?)"
db.execute(insert,(styles,id))

我知道我犯了一个错误,但这里每行有 4 个字段,似乎是正确的

search_ = [[["Redwine"],['04'],['01'],['81535']],[["Redwine"],['02'],['81536']],['03'],['81537']],['81538']],['05'],['81539']],['06'],['81540']],['07'],['81541']],['08'],['81542']],['09'],['81543']],['10'],['81544']],['11'],['81545']],['12'],['81546']],['97179']],['97180']],['97181']],['97182']],['97183']],['97184']],['97185']],['97186']],['97187']],['97188']],['97189']],['97190']]]

([styles],[id]) = search_

insert= "INSERT INTO cantina (styles,id))

编辑:

嗨 Barmar ,因为该列表来自我加入的另一个函数 四个列表:

def cantina ( cantina_id)
  for ... in ...:
     styles = 
     season  = 
     day = 
     id = 
     result.append([[styles],[season],[id]]])
  return result

和 'append' 只接受一个参数。

我必须根据'cantina_id'处理一些数据; 将其添加到四个列表中并保存到 db

解决方法

您需要遍历 search_ 并分别处理每一行。

insert= "INSERT INTO cantina (styles,seasons,day,id) VALUES (?,?,?)"
for row in search_:
    ([styles],[seasons],[day],[id]) = row
    cur.execute(insert,(styles,id))
db.commit()

如果您更改 cantina 函数使其不会创建所有这些单元素列表,您可以使用 executemany()

def cantina ( cantina_id)
  result = []
  for ... in ...:
     styles = 
     season  = 
     day = 
     id = 
     result.append([styles,season,id])
  return result

search_ = cantina(some_id)
insert= "INSERT INTO cantina (styles,?)"
cur.executemany(insert,search_)
db.commit()

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...