我正在尝试将None
值插入到我的数据库的行条目中。表present
存在
db.execute("INSERT INTO present VALUES('test', ?, 9)", "This is a test!")
db.execute("INSERT INTO present VALUES('test2', ?, 10)", None)
但是我收到了错误:
ValueError: parameters are of unsupported type
如何为行中的第二个字段插入空白值?
答案 0 :(得分:24)
使用元组,I.E。:
db.execute("INSERT INTO present VALUES('test2', ?, 10)", (None,))
答案 1 :(得分:1)
我不确定在发布原始问题时是否可以追溯到现在,但是直到今天:
db.execute("INSERT INTO present VALUES('test', ?, 9)", "This is a test!")
抛出
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 15 supplied.
当跑步。
因为execute()
接受sql
(这是要执行的sql查询)和parameters
(这是可迭代的),其中包含查询参数(目前,Python 2和{ Python 3。由于字符串是可迭代的,因此会对其进行相应处理。
Docs明确指出,Python None
类型与SQLite NULL
类型相对应。
因此,正确的方法是:
db.execute("INSERT INTO present VALUES('test2', :null, 10)", {'null':None})
#or
db.execute("INSERT INTO present VALUES('test2', ?, 10)", (None,))
答案 2 :(得分:0)
这里的问题是,您提供的值应该在列表或元组中。第二个参数应该是可以迭代的集合(某种数组)。如果您提供一个集合,即使该集合中只有一个值,它也将起作用。尽管出现另一个问题,因为字符串的行为类似于字符的集合,并且可以被迭代。因此,当您提供单个字符串而不将其放入集合本身时,它表示“集合”与绑定数(问号)相比太大。字符串“这是一个测试!”长度为15个字符,当在其上使用len()函数时,它看起来像具有15个值的集合(数组)。因此sqlite3认为您已根据需要传递了一个集合,但是该集合的大小与查询中获得的绑定数不匹配。