#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)