sqlite3 错误:您没有提供绑定 1 的值 [英] sqlite3 error: You did not supply a value for binding 1

查看:83
本文介绍了sqlite3 错误:您没有提供绑定 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆