sqlite3 错误:您没有提供绑定 1 的值 [英] sqlite3 error: You did not supply a value for binding 1
问题描述
def save():全球编辑conn = sqlite3.connect('address_book.db')c = conn.cursor()recordID = delete_box.get()c.execute("""更新地址SET名字=:第一个,last_name=:last,地址=:地址,城市=:城市,状态=:状态,邮政编码=:邮政编码WHERE oid=:oid""",{'oid': int(recordID),'第一个:':ef_name.get(),'last': el_name.get(),地址":eaddress.get(),'城市':ecity.get(),'状态': Estate.get(),'邮政编码':ezipcode.get()})conn.commit()conn.close()editor.destroy()
<块引用>
文件C:/Users/Luke/PycharmProjects/GUI/database.py",第23行,保存c.execute("""更新地址SETsqlite3.ProgrammingError: 您没有提供绑定 1 的值.
有人能看到是什么导致了这个错误吗?我确定我没有在任何地方打错字,并且很困惑这可能是什么根源.
欢迎使用 StackOverflow!我认为您犯的错误是您使用了参数替换样式 (paramstyle) 这不是 sqlite3
上的默认设置.您正在尝试使用 named
样式而不是默认的 qmark
样式.如果您使用 qmark
样式,您的 UPDATE
将如下所示:
c.execute('更新地址 SET first_name=?, last_name=?, address=?, city=?, state=?, zipcode=?WHERE old=?',(ef_name.get(), el_name.get(), eaddress.get(), ecity.get(),Estate.get(), ezipcode.get(), int(recordID)))
但是如果您真的想使用 named
参数样式,您可以为该模块设置该属性.这是一个完整的示例:
导入 sqlite3sqlite3.paramstyle = '命名'参数 = [{'旧':1,'第一个':托尼",'last': "斯塔克斯",'address': '10880 Malibu Point','city': '马里布','state': '加利福尼亚','邮政编码':'12345-6789'},{'旧':1,'第一个':胡椒",'last': "Potts",'address': '10880 Malibu Point','city': '马里布','state': '加利福尼亚','邮政编码':'12345-6789'}]conn = sqlite3.connect('address_book.db')c = conn.cursor()c.execute('CREATE TABLE 地址(旧的,名字,姓氏,地址,城市,州,邮政编码)')c.execute('INSERT INTO 地址值 (:old, :first, :last, :address, :city, :state, :zipcode)', parameters[0])conn.commit()打印('插入后')对于 c.execute('SELECT * FROM 地址') 中的行:打印(行)c.execute('更新地址SET first_name=:first, last_name=:last, address=:address, city=:city, state=:state, zipcode=:zipcode WHERE old=:old', parameters[1])conn.commit()打印('更新后')对于 c.execute('SELECT * FROM 地址') 中的行:打印(行)conn.close()
def save():
global editor
conn = sqlite3.connect('address_book.db')
c = conn.cursor()
recordID = delete_box.get()
c.execute("""UPDATE addresses SET
first_name=:first,
last_name=:last,
address=:address,
city=:city,
state=:state,
zipcode=:zipcode
WHERE oid=:oid""",
{
'oid': int(recordID),
'first:': ef_name.get(),
'last': el_name.get(),
'address': eaddress.get(),
'city': ecity.get(),
'state': estate.get(),
'zipcode': ezipcode.get()})
conn.commit()
conn.close()
editor.destroy()
File "C:/Users/Luke/PycharmProjects/GUI/database.py", line 23, in save c.execute("""UPDATE addresses SET sqlite3.ProgrammingError: You did not supply a value for binding 1.
Can anybody see what is causing this error? I'm sure that I didn't make a typo anywhere and am very confused what could be the root of this.
Welcome to StackOverflow! I think the error you made is that you have used the parameter subtitution style (paramstyle) that is not the default one on sqlite3
. You are trying to use the named
style instead of the default qmark
style. If you used the qmark
style your UPDATE
would have looked like this:
c.execute(
'UPDATE addresses SET first_name=?, last_name=?, address=?, city=?, state=?, zipcode=? WHERE old=?',
(ef_name.get(), el_name.get(), eaddress.get(), ecity.get(),
estate.get(), ezipcode.get(), int(recordID))
)
But if you really want to use the named
paramstyle, you can set that attribute for that module. Here's a complete example:
import sqlite3
sqlite3.paramstyle = 'named'
parameters = [
{
'old': 1,
'first': "Tony",
'last': "Starks",
'address': '10880 Malibu Point',
'city': 'Malibu',
'state': 'California',
'zipcode': '12345-6789'
},
{
'old': 1,
'first': "Pepper",
'last': "Potts",
'address': '10880 Malibu Point',
'city': 'Malibu',
'state': 'California',
'zipcode': '12345-6789'
}
]
conn = sqlite3.connect('address_book.db')
c = conn.cursor()
c.execute('CREATE TABLE addresses (old, first_name, last_name, address, city, state, zipcode)')
c.execute('INSERT INTO addresses VALUES (:old, :first, :last, :address, :city, :state, :zipcode)', parameters[0])
conn.commit()
print('After INSERT')
for row in c.execute('SELECT * FROM addresses'):
print(row)
c.execute('UPDATE addresses SET first_name=:first, last_name=:last, address=:address, city=:city, state=:state, zipcode=:zipcode WHERE old=:old', parameters[1])
conn.commit()
print('After UPDATE')
for row in c.execute('SELECT * FROM addresses'):
print(row)
conn.close()
这篇关于sqlite3 错误:您没有提供绑定 1 的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!