我有一个包含用户名和密码的数据库。我想搜索这两个匹配,如果匹配,用户可以登录(如果没有错误显示)。
然而,我的代码的if条件无法实现(即使用户名和密码匹配)。
我的SQL查询一定是错的,我尝试找到一个解决方案,在查询中搜索多个变量,但遗憾的是找不到对我有用的答案,因此我问过这个问题。
def userLogin(self):
username, password = self.getUserPass()
con = sql.connect("database.db")
cur = con.cursor()
cur.execute("SELECT * FROM users WHERE (?) AND (?)", (username, password))
if cur.fetchmany(size=1):
print("Username and Password match!")
else:
print("Wrong username and password combination.")
答案 0 :(得分:3)
参数替换只是将给定变量的内容插入到查询中。因此,对于用户“myuser”和密码“mypass”,您正在运行的查询是:
SELECT * FROM users WHERE ('myuser') AND ('mypass')
这不会按预期执行,因为您尚未指定要检查的列。首先编写一个可以从交互式SQLite shell运行的完整示例查询。例如,如果您的用户名列名为“user”,而您的密码列名为“pass”,则您的查询可能是:
SELECT * FROM users WHERE user='myuser' AND pass='mypass'
然后只需用问号替换变量值(包括引号,如果它是一个字符串):
SELECT * FROM users WHERE user=? AND pass=?
将该查询替换为您的代码,它应该按预期行事。