1

我想使用 python 中的 sqlite 库将变量中的一些数据添加到我的数据库中。我创建一个表,然后运行 ​​sql 语句。这是我的简单代码:

import sqlite3
db = sqlite3.connect("dbse.sqlite")
cursor= db.cursor()
cursor.execute("CREATE TABLE Myt (Test TEXT)")
variable = ('aaa')
cursor.execute('INSERT INTO Myt VALUES (?)' , variable)
db.commit()

但运行代码后,出现此错误:

cursor.execute('INSERT INTO Myt VALUES (?)' , variable)
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 3 supplied.

当我插入一个包含一个字符值的变量时,它工作得很好,但是当我使用一个具有多个字符的变量时,它就不起作用了。我使用 python 3.2.3 。你有解决它的想法吗?

4

2 回答 2

4

variable应该是一个元组:

variable = ('aaa',) # Notice the comma

创建单元素元组时,最后需要使用逗号。作为旁注,请记住,使用该tuple()方法不会提供您想要的:

>>> tuple('aaa')
('a', 'a', 'a')
>>> ('aaa',)
('aaa',)
于 2012-07-29T19:46:35.053 回答
2

cursor.execute()期望第二个参数是一个序列。你variable是一个字符串,恰好是一个长度为 3 的序列:

>>> len(variable)
3
>>> list(variable)
['a', 'a', 'a']

这就是导致您令人困惑的错误消息的原因;.execute看到一个 3 元素的序列并且只期望 1。将它传递给.execute一个元素的元组:

cursor.execute('INSERT INTO Myt VALUES (?)', (variable,))

注意那里的逗号。

于 2012-07-29T19:49:22.303 回答