Member 14147359 Ответов: 0

Как правильно вставить данные, содержащиеся в виджетах ввода на графическом интерфейсе, в базу данных 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

Похоже, вы храните пароли в виде обычного текста. Не делай этого!

Безопасная Аутентификация Паролем Объясняется Просто[^]
Соленое хэширование паролей - делаем это правильно[^]

0 Ответов