用户名是使用 tkinter 从输入框中提取的变量。我需要 dbsalt 将 cursor1.execute 查询的结果作为字符串返回,但它返回“无”或显示一个回溯,指出“NoneType 没有属性 getitem”。我不明白什么是不正确的。
def login_verification(self):
sql = ("SELECT salt FROM User WHERE username = %s")
username = self.KUEntry.get()
print username
cursor1.execute(sql, username)
dbsalt = cursor1.fetchone() [0]
print dbsalt
sql2 = ("SELECT PashHash FROM User WHERE username = %s")
cursor2.execute(sql2, username)
dbhash = cursor2.fetchone() [0]
print dbhash
test = hashlib.sha512(username + dbsalt).hexdigest()
print test
if test == dbhash:
self.intro_screen
else:
print "incorrect password"
最佳答案
您没有调用execute
方法,而是分配给它。使用 cursor.execute(..)
调用它:
并且您应该使用 '
来引用字符串。
username = self.KUEntry.get()
cursor1.execute("SELECT salt FROM User WHERE username = '%s'" % username)
dbsalt = str(cursor1.fetchone())
print dbsalt
顺便说一句,最好使用参数传递方式来防止 SQL 注入(inject),而不是手动格式化字符串。
cursor1.execute("SELECT salt FROM User WHERE username = %s", [username])
关于python - 为什么我的 .fetchone 函数返回 "none"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43773397/