Python实现MySQL数据库用户名存在性校验(返回布尔值)
修复用户名可用性检查的问题
原代码存在的问题
- 数据库连接语句缺少闭合括号,会触发语法错误
- 查询全表用户名再循环对比,数据量大时效率极低
- 逻辑错误:每遍历一个用户就输出一次结果,无法给出「该用户名是否可用」的最终结论
- 存在潜在SQL注入风险(若后续修改为直接拼接输入内容时)
修正后的代码
import mysql.connector # 修复连接语句的括号缺失问题 db = mysql.connector.connect( host="localhost", user="user", password="password", database="users" ) mycursor = db.cursor() username = input("Username: ") # 使用参数化查询,精准定位目标用户名,同时避免SQL注入 query = "SELECT username FROM users WHERE username = %s" mycursor.execute(query, (username,)) # 检查是否有匹配结果 result = mycursor.fetchone() if result: print("用户名已存在") else: print("用户名可用") # 及时关闭游标与数据库连接,避免资源占用 mycursor.close() db.close()
关键改进点
- 补上数据库连接语句的闭合括号,修复语法错误
- 通过
WHERE条件直接查询目标用户名,无需遍历全表,提升查询效率 - 使用参数化查询方式,从根源避免SQL注入风险
- 通过
fetchone()一次性判断是否存在匹配结果,输出准确的最终结论 - 添加游标与连接的关闭操作,养成资源清理的好习惯
内容的提问来源于stack exchange,提问作者Jaromír Staš
相关产品推荐
相关产品推荐

