python - 为什么我的 .fetchone 函数返回 "none"?

标签 python mysql tkinter

用户名是使用 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/

相关文章:

python - 按长度将字符串拆分为字符串?

mysql - 组依赖SQL设计

python - 无法使用 pyinstaller 执行脚本 myfile.py

python - tkinter stipple 选项在 OS X 中行为不当

python - 如何向 tkinter GUI 添加图像组件?

python - 解包类似元组的文本文件

python - 使用 MultiIndex 删除 DataFrame 中的对称对

python - Pandas - 比较excel和数据框之间的索引和列以输入值

mysql - 如果条件参数为空,则选择所有行

mysql - MySQL 中函数组合的歧义