You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 15:15:16