为什么字符串不等于sqlite3数据库(Python)中的文本值

2024-09-24 22:24:14 发布

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

嗨,我正在尝试在tkinter中创建一个简单的登录模块,我从用户通过输入小部件输入,并通过if循环将该密码与数据库中的密码进行比较。。。但是由于某些原因密码不匹配,所以我尝试了一些测试,结果它没有匹配。。。。在

import sqlite3
conn=sqlite3.connect('auth_rWebsites.db')
c=conn.cursor()

def check_password(key):
    thePass= c.execute("SELECT pass FROM user_pass") 
    if key == thePass:
        print("right Password")
    else:
        print("Wrong Password")

rows= c.execute("SELECT * FROM user_pass")
for row in rows:

    print row

check_password("root")

这是我写的上面的简单测试代码。。 输出是

^{pr2}$

所以有人请解释一下为什么会发生这种情况,我要做些什么来匹配它。。。。在


Tags: keyfrom密码executeifcheckpasspassword
2条回答

thePass是一个iterable,yeildstuples,key是一个字符串。在

通常,pythondbapi总是以元组的形式返回数据库行,因为您可以在一个语句中选择多个内容。该规范没有使用需要查看查询来确定行的返回类型(对于数据库api和调用方),而是要求始终返回一个元组。在

您需要正确地将key与该行进行比较。。。在

rows = c.execute("Select pass FROM user_pass")
for row in rows:
    if row[0] == thePass:
        print("right password")
        return
else:
    print("Wrong Password")    

注意,这可能不是你真正想要的。它所做的只是验证user_pass表中的一行是否具有pass值。更可能的情况是,您需要根据用户名筛选查询,然后检查密码:

^{pr2}$

c.execute("SELECT pass FROM user_pass")返回的是元组,不是字符串,key是字符串。您需要从元组中获取第一个值,并将其与您的key参数进行比较,因此将函数更改为:

def check_password(key):
    thePass= c.execute("SELECT pass FROM user_pass")[0] # Changed here
    if key == thePass:
        print("right Password")
    else:
        print("Wrong Password")

相关问题 更多 >