【问题标题】:sqlite3 binding first projectsqlite3绑定第一个项目
【发布时间】:2026-01-25 01:55:01
【问题描述】:

我正在使用 python 在 sqlite3 中做我的第一个项目。但我不断收到错误消息:

MCurs.execute("""更新艺术家集 sqlite3.ProgrammingError:您没有为绑定 5 提供值。

MCurs.execute("""UPDATE Artist SET
    first_name=:first,
    last_name=:last,
    genre=:genre,
    album=:album
    
    Where oid =:oid""",
    {
    'first':first_name_box_edit.get(),
    'last':last_name_box_edit.get(),
    'genre':genre_box_edit.get(),
    'album':album_box_edit.get()
    })

【问题讨论】:

    标签: python sqlite tkinter


    【解决方案1】:

    基本上你的错误是你说:oid 但在字典中没有给:oid 赋值。因此,您必须指定字典中的 :oid 是什么,例如:

    {
        'first':first_name_box_edit.get(),
        'last':last_name_box_edit.get(),
        'genre':genre_box_edit.get(),
        'album':album_box_edit.get(),
        'oid':whatever_variable #here you have to specify your oid
    }
    

    或者有一种更好的方式在 SQLite 中使用占位符,即?。方法如下:

    sql_command = """UPDATE Artist SET
        first_name=?,
        last_name=?,
        genre=?,
        album=?
        Where oid=?"""
    values = first_name_box_edit.get(),last_name_box_edit.get(),genre_box_edit.get(),album_box_edit.get(),oid_variable)
    MCurs.execute(sql_command,values)
    

    基本上,您只需将:first 更改为?,然后再从传递的元组中为其赋值。这里values 是元组。尽管您可以将所有这些组合成一个 execute()。还要记住你传递的任何值 HAS 是一个元组。

    但请记住,无论哪种方式,您都没有传递 oid 的值,这就是错误。

    【讨论】:

      【解决方案2】:

      oid是miss,这样看,更正确更简单,我已经“为绑定5提供一个值”,即oid = 1

      sql = "UPDATE Artist  SET first_name =?, last_name =?,  genre =?, album =? WHERE oid =?"
      
      args = (first_name_box_edit.get(),
              last_name_box_edit.get(),
              genre_box_edit.get(),
              album_box_edit.get(),
              1)
      
      cur.execute(sql, args)
      

      【讨论】:

        最近更新 更多