привязка первого проекта к sqlite3

#python #sqlite #tkinter

#python #sqlite #tkinter

Вопрос:

Я делаю свой первый проект в sqlite3, используя python. Но я продолжаю получать сообщение об ошибке:

MCurs.execute(«»»ОБНОВИТЬ НАБОР исполнителей sqlite3.Ошибка программирования: вы не указали значение для привязки 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()
    })
  

Ответ №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() . Также имейте в виду, что любое значение, которое вы передаете, ДОЛЖНО быть кортежем.

Но в любом случае имейте в виду, что вы не передаете значение для oid , и это ошибка.

Ответ №2:

oid отсутствует, посмотрите сюда, это более правильно и просто, я «указал значение для привязки 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)