1

当我尝试插入使用列表压缩生成的元组列表时,executemany 会引发错误,但如果它是硬代码,则在插入相同列表时有效。当我尝试:

a=[(i[0][0],i[0][1],i[0][2],i[1][0],i[1][1],i[0][5]) for i in zipList_updates]
c.executemany('INSERT INTO Households VALUES(?,?,?,?,?,?)',a)

我得到:InterfaceError: Error binding parameter 4 - 可能是不受支持的类型。

但是当我将值列表硬编码为:

b=[('1000000US371830501001017', 'White', 2, '150-200K', 184, 'Renter'),\
('1000000US371830501001017', 'Asian', 2, '125-150K', 250, 'Renter')]

并尝试:

c.executemany('INSERT INTO Households VALUES(?,?,?,?,?,?)',b)

它工作正常。当我检查 a==b 时,我得到了 True。

我不明白怎么可能,因为 a 和 b 似乎是同一件事。

4

1 回答 1

0

我怀疑包装物品str()可能会有所帮助:

# factor out a bit of copy-paste
def makeTuple(record):
  indexes = ((0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (0, 5))
  # note the str↴
  return tuple(str(record[j][k]) for (j, k) in indexes)

a = [makeTuple(i) for i in zipList_updates]

尝试检查. _ a绝对在元组中的b项目是字符串。我不知道里面有什么zipLiat_updates

我已经看到对象通过巧妙地代理属性(包括相等)来伪装字符串的行为。但是,如果将这样的对象传递给 C 库之类的sqlite或其他数据库驱动程序,这种错觉就会消除:会发生类型错误,因为它们需要一个真正的字符串。

于 2015-12-28T21:11:05.613 回答