Python:“非类型”对象不可下标”错误

2024-09-26 17:54:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我不熟悉Python中的数据库,因此为了练习一些关键技能,我正在构建一个登录屏幕,将用户名和哈希密码写入数据库,然后根据数据库中的内容检查用户的输入。然而,当试图从数据库中提取用户名和密码并将它们存储在变量中时,我不断得到“'NoneType'对象不可订阅”错误

我怎样才能解决这个问题

这是我的程序中包含错误的函数

def login():
usernameAttempt = input("Enter your username: ")
passwordAttempt = input("Enter your password: ")

usernameSql = """SELECT Username FROM Details WHERE Password = '%s'""" % (passwordAttempt) # Selecting username in database
cur.execute(usernameSql)
usernameSql = cur.fetchone()
userFetched = usernameSql[0] # Pulling the item from the database

passwordSql = """SELECT Password FROM Details WHERE Username = '%s'""" % (usernameAttempt)
cur.execute(passwordSql)
passwordSql = cur.fetchone()
passFetched = passwordSql[0]

dbPassword, dbSalt = passFetched.split(":")

return dbPassword, dbSalt, passwordAttempt, usernameAttempt, userFetched, passFetched

我希望userFetched和passFetched变量被分配到username和password列中索引0处的值,但错误消息如下:

回溯(最近一次呼叫最后一次):

文件“C:\Users\laure\Documents\Login screen.py”,第57行,在 dbPassword、dbSalt、passwordtrunt、usernametrupt、userFetched、passFetched=login()

文件“C:\Users\laure\Documents\Login screen.py”,第34行,登录 userFetched=usernameSql[0]#从数据库中提取项目 TypeError:“非类型”对象不可下标


Tags: 对象数据库密码错误username用户名curdbpassword
2条回答

当查询返回0行时fetchone将返回None

usernameSql = """SELECT Username FROM Details WHERE Password = '%s'""" % (passwordAttempt) # Selecting username in database
cur.execute(usernameSql)
usernameSql = cur.fetchone()
# check if the query return at least one record
if usernameSql:
    userFetched = usernameSql[0] 
else:
   # show a error or somthing

您的select Username查询没有返回任何行。因此,结果集是空的,并且没有要获取的内容。因此fetchone调用返回的是None,而不是您期望的行元组

相关问题 更多 >

    热门问题