【问题标题】:python sqlite executemany statement error: ValueError: parameters are of unsupported typepython sqlite executemany语句错误:ValueError:参数类型不受支持
【发布时间】:2015-10-23 11:45:35
【问题描述】:

我想要做的似乎应该很简单,但我就是无法克服我遇到的错误。基本上,我创建一个列表,创建一个数据库表,然后想将列表的元素插入到表中。这是我得到的:

F_wheel_data = [1,3,1,3,1,3,1,3,1,3,2,1,3,1,3,1,3,1,3,1,3,4]
curs.execute('CREATE TABLE F_wheel (url_num INTEGER NOT NULL)')
curs.executemany('INSERT INTO F_wheel VALUES (?)', F_wheel_data)

我得到的错误是:

curs.executemany('INSERT INTO F_wheel VALUES (?)', F_wheel_data)
ValueError: parameters are of unsupported type

什么给了?

【问题讨论】:

  • 您是否尝试过只插入一个值或循环遍历数组以一次插入一个值,而不是一次插入所有值?

标签: python sqlite executemany


【解决方案1】:

查看this documenationexecutemany(),您需要传递一个元组列表。

F_wheel_data = [1,3,1,3,1,3,1,3,1,3,2,1,3,1,3,1,3,1,3,1,3,4]
F_wheel_data = [(i,) for i in F_wheel_data]

【讨论】:

  • 这行得通,但奇怪的是“2”是第一个 rowid,“3”是第一个记录(不是“1”)......但是列表的所有 22 个元素都被插入, 只是不按元组列表的顺序。
  • 您显示的表格没有 rowId 列。 SQL 中的数据没有内在顺序,除非您在查询中指定 ORDER BY 子句,否则数据库可以按任何顺序返回行。
  • 糟糕,我的错。我在上面的代码之后有代码,它旋转了表中的记录(删除第一条记录并再次插入......成为最后一条记录)。我忘了它在那里。
【解决方案2】:

看起来executemany() 采用元组列表,而不是整数列表。

我不是 SQL 专家,但我会尝试:

F_wheel_data = [(1),(3),(1),(3),...,(4)]

【讨论】:

  • 这几乎可以工作。对于单元素元组,您需要添加一个逗号,例如 [(1,),(3,),(1,),(3,),...,(4,)]。那么,一切都很好
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-02
  • 1970-01-01
  • 2016-02-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多