Как правильно вставить данные, содержащиеся в виджетах ввода на графическом интерфейсе, в базу данных SQL, созданную на Python?
Я использую метод get в python для извлечения содержимого виджетов ввода в графическом интерфейсе, который я создал, как только пользователь нажимает кнопку, чтобы сообщить программе, что они ввели данные в виджеты ввода. Затем я добавляю эти данные в список и вставляю их в виде записи в базу данных sql, созданную в python. Однако, когда я запускаю свой код, я продолжаю получать ошибку, показанную ниже.
В коде ниже виджеты ввода str, которые я использую метод get для извлечения данных, были созданы ранее в коде.
# declares and defines function that checks that data in the 'Password' and ' Confirm Password' entries match def MatchingPasswordsValidator(): if str(PasswordEntry.get())!= str(ConfirmPasswordEntry.get()): tkinter.messagebox.showerror("","Please ensure the passwords you enter match") else: # declares list variable UserDetails = [] # populates list variable UserDetails.append(str(FirstNameEntry.get())) UserDetails.append(str(SurnameEntry.get())) UserDetails.append(str(PasswordEntry.get())) UserDetails.append(str(ConfirmPasswordEntry.get())) # inserts user's details into the program's database c.executemany("INSERT INTO tblUserDetails VALUES(?,?,?,?)",UserDetails) # saves changes made to database conn.commit() File "C:\Users\User\Documents\School\CS\Project\Screen2.py", line 135, in MatchingPasswordsValidator c.executemany("INSERT INTO tblUserDetails VALUES(?,?,?,?)",UserDetails) sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 4, and there are 1 supplied.
Что я уже пробовал:
Я попробовал следующие способы решения этой проблемы:
превращение списка в кортеж
использование литерала списка
вставка данных в базу данных в виде переменных, а не в виде списка
получение данных из виджетов ввода, вставка их в переменные python, затем я вставил переменные python в переменную списка, а затем попытался вставить эту переменную списка в созданную мной базу данных sql
Richard MacCutchan
Вам нужно указать имена переменных по отдельности, а не в виде списка. Из сообщения это выглядит как ограничение sqlite3.
Richard Deeming
Похоже, вы храните пароли в виде обычного текста. Не делай этого!
Безопасная Аутентификация Паролем Объясняется Просто[^]
Соленое хэширование паролей - делаем это правильно[^]