使用Tkinter在SQLite3表中插入变量时发生NameError和AttributeError吗?

时间:2018-11-22 19:43:01

标签: python database tkinter sqlite

我想创建一个文本文件管理器,但是我停留在登录/注册页面。我的程序从用户那里获取输入(名称,姓氏,用户名和密码)并将其全部存储在数据库中。但是,我无法检索上述数据,因为每次尝试时,都会遇到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 :(得分:0)

这是我的一种解决方法,用于检查插入到条目中的数据是否为db中的有效数据。由于您没有粘贴密码的列名,因此我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.')