NameError и AttributeError при вставке переменных в таблицу SQLite3 с помощью Tkinter? - PullRequest
0 голосов
/ 22 ноября 2018

Я хотел создать менеджер текстовых файлов, но я застрял на странице входа / регистрации.Моя программа принимает входные данные (имя, фамилию, имя пользователя и пароль) от пользователя и сохраняет их все в базе данных.Однако я не могу извлечь указанные данные, потому что каждый раз, когда я пытаюсь, я получаю либо NameError (uname не определено (uname везде глобально)), либо AttributeError (объект str не имеет .get ()).Вот небольшой фрагмент моего кода:

def login_check():
  global password, uname
  checkpass=cur.execute("SELECT Password from Sample WHERE Uname = (?);",(uname.get()),)
  conn.commit;
  if checkpass==password.get():
      mainscreen()
  else:
      mb.showerror('Login Failed','Username or Password incorrect. Please retry.')

Вот как я взял запись для имени пользователя в другой функции:

uname=Entry(spp)
uname.grid(row=3, column=1)
cur.execute("insert into Sample values (?, ?, ?, ?)", (fname.get(), lname.get(), uname.get(), password.get()));

Программа работала хорошо и не работалапоказать ошибки только до недавнего времени.Я не могу добавить весь код здесь, потому что он слишком большой, но я был бы очень признателен, если бы кто-то мог предложить, что я мог бы сделать, чтобы улучшить его.Спасибо!

1 Ответ

0 голосов
/ 23 ноября 2018

Это обходной путь от меня, чтобы проверить, являются ли данные, вставленные в запись, действительными данными в дБ.Так как вы не вставили имя столбца для пароля, я сделал это P_word, изменив его на имя столбца пароля в вашей таблице.

Это проверит, действительны ли данные, прежде чем откроет главное window, еслине messagebox всплывет.Убедитесь, что вы закрыли окно входа в систему после открытия главного окна.

def login_check():
  global password, uname

  con = sqlite3.connect("database_name.db") # your database should be name
  cur = con.cursor()

  attempt = ("SELECT * FROM Password WHERE Uname=? AND P_word=?") # column to check name n password
  cur.execute(attempt, (uname.get(), password.get()))
  rows = cur.fetchall()

  if rows:
      mainscreen()
  else:
      mb.showerror('Login Failed','Username or Password incorrect. Please retry.')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...