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

Python人脸识别项目:可识别人脸但无法从MySQL读取显示用户信息

问题分析与修复方案

核心错误点

  • 查询结果处理错误:调用fetchone()后已获取到单条结果(元组格式),但后续错误地尝试将游标对象用"+".join()拼接,游标并非可迭代的字符串集合,导致n、r、i无法得到正确的用户信息。
  • 重复查询效率低下:针对同一个Id执行三次独立查询,完全可以合并为一次查询获取所有需要的字段。
  • 存在SQL注入风险:直接拼接字符串构造SQL语句,容易引发安全问题。
  • 空值未处理:未考虑查询结果为空(无匹配Id的记录)的情况,会导致后续代码报错。

修复后的代码片段

my_cursor = conn.cursor()

# 一次查询获取所有字段,使用参数化查询避免SQL注入
sql = "select Name, RollNo, Id from student where Id = %s"
my_cursor.execute(sql, (str(id),))
result = my_cursor.fetchone()

# 初始化默认值,避免无匹配记录时出错
n = "Unknown"
r = "Unknown"
i = "Unknown"

# 若查询到有效结果,提取对应字段值
if result:
    n, r, i = result

if confidence > 77:
    cv2.putText(img, f"Name:{n}", (x, y - 75), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (255, 255, 255), 1)
    cv2.putText(img, f"Roll:{r}", (x, y - 40), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (255, 255, 255), 1)
    cv2.putText(img, f"Id:{i}", (x, y - 5), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (255, 255, 255), 1)

else:
    cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 3)
    cv2.putText(img, "Unknown Face", (x, y - 55), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (255, 255, 255), 3)

coord = [x, y, w, h]

return coord

关键修复说明

  1. 合并查询+参数化:用单条SQL语句查询所有需要的字段,通过%s占位符传递参数,既避免了SQL注入风险,又提升了查询效率。
  2. 正确处理结果:fetchone()返回匹配的元组数据(若存在),直接解构赋值给变量;无匹配记录时使用默认值,防止后续代码报错。
  3. 移除无效操作:删除"+".join(my_cursor)这类错误的游标拼接逻辑,直接使用查询返回的结果数据。

内容的提问来源于stack exchange,提问作者Rambo7153

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 02:45:50