Python数据库查询报错:Incorrect Number of bindings supplied 求助
问题:Python登录验证SQL绑定参数报错
我编写了如下Python登录验证代码:
def login(): loggedIn = False userInput = input("please enter your username: ") pwdInput = input("please enter your password: ") searchUser = hashlib.md5(userInput.encode()).hexdigest() searchPwd = hashlib.md5(pwdInput.encode()).hexdigest() query = """SELECT * FROM Users WHERE Username =?;""" cursor.execute(query, searchUser) record = cursor.fetchone() if record: print("found")
注:实际代码中缩进是正确的。
我先对输入的用户名和密码进行MD5哈希处理,想要查询Users表匹配用户名,但始终报错Incorrect number of bindings supplied. The current statement uses 1 and there are 32 supplied,尝试将查询语句与变量合并到一行也无法解决问题,请求帮助排查。
问题原因与解决办法
错误原因
cursor.execute()方法的第二个参数要求传入**序列(元组、列表等)**类型的参数集合。你直接传入了MD5哈希后的字符串(长度为32位),数据库驱动会将字符串视为字符序列,误以为你传入了32个参数,但SQL语句中只定义了1个占位符?,因此触发参数数量不匹配的错误。
解决方法
将searchUser包装成元组(注意单个元素的元组必须加逗号,否则会被识别为普通括号表达式):
修改后的关键代码:
cursor.execute(query, (searchUser,))
完整修改后的代码示例
import hashlib # 假设已正确初始化数据库连接和cursor def login(): loggedIn = False userInput = input("please enter your username: ") pwdInput = input("please enter your password: ") searchUser = hashlib.md5(userInput.encode()).hexdigest() searchPwd = hashlib.md5(pwdInput.encode()).hexdigest() query = """SELECT * FROM Users WHERE Username =?;""" # 注意这里的元组写法 cursor.execute(query, (searchUser,)) record = cursor.fetchone() if record: print("found")
额外提醒:MD5属于不安全的哈希算法,容易被暴力破解,生产环境中建议使用bcrypt、Argon2或PBKDF2等专门针对密码设计的哈希算法。
内容的提问来源于stack exchange,提问作者Lazyiness
相关产品推荐
相关产品推荐

