Python 2.7中DB-API SQLite插入语句抛出InterfaceError

1 投票
1 回答
1172 浏览
提问于 2025-04-16 10:25

我创建了一个SQLite表,其中有一个字段是类型为TEXT。我尝试运行以下代码,但失败了:
hsh = hashlib.sha1("".join(some_list)).hexdigest()
db_setup(hsh)

结果我收到一个错误信息:
InterfaceError: Error binding parameter 2 - probably unsupported type.

def db_setup(my_hash, oavals)
    to_insert = (my_hash,)
    ('INSERT INTO position VALUES \
    (null, ?, ?, null, ?, ?, ?, ?, ?)',(0, 0, to_insert,
    oavals["a"], oavals["b"],
    oavals["c"], oavals["d"]))

如果我在db_setup函数中用一个手动输入的整数或字符串(比如57或者"hello")替代to_insert,那就能正常工作。这让我觉得问题可能出在哈希值上,不知道为什么会这样。我感觉我可能漏掉了什么明显的东西。


表的结构是:
'CREATE TABLE position \
(id INTEGER PRIMARY KEY, position INTEGER, displayline INTEGER, \
header TEXT, digest TEXT, conkey TEXT, consecret TEXT, \
acckey TEXT, accsecret TEXT)'

1 个回答

2

这个失败是因为 to_insert 是一个元组,而不是你想要插入的值。

试着把第一行改成:

to_insert = my_hash

或者更简单一点,直接把 my_hash 放到你的参数列表里。

这里有个例子:

>>> hsh = '49cb6536afc7e4a4b3a94eb493aae4d52b8f6a60'
>>> conn = sqlite3.connect(':memory:')
>>> c = conn.cursor()
>>> c.execute("CREATE TABLE t (i TEXT);")
>>> c.execute("INSERT INTO t VALUES (?)", (hsh,)) # tuple works
<sqlite3.Cursor object at 0x011A35E0>
>>> c.execute("INSERT INTO t VALUES (?)", ((123,),)) # tuple within tuple doesn't
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
sqlite3.InterfaceError: Error binding parameter 0 - probably unsupported type.

撰写回答