无法从Python sqlite3数据库获取整数类型数据的问题求助
解决SQLite查询返回格式与类型问题
问题分析
你的代码存在两个核心问题:
- SQL查询条件错误:
WHERE username = username会被SQL解析为“字段username等于自身”,这会返回表中所有用户的clearance值,而非指定用户的数据。 - 结果处理与类型转换缺失:SQLite默认返回字符串类型的字段值,且
fetchall()/fetchone()会以元组/列表套元组的格式返回结果,需要手动提取值并转换类型。
修正后的代码
import sqlite3 db = sqlite3.connect("Users.db") cursor = db.cursor() def get_clearance(username='CC-2225'): # 使用参数绑定传递变量,修正查询条件同时避免SQL注入风险 find_clearance = "SELECT clearance FROM user WHERE username = ?" cursor.execute(find_clearance, (username,)) # 用户名唯一,用fetchone()获取单个结果元组 result = cursor.fetchone() if result: # 提取元组中的值并转换为整数 return int(result[0]) # 未找到对应用户时返回None return None print(get_clearance())
关键说明
- 修正查询逻辑:用
?作为占位符,通过cursor.execute的第二个参数传递用户名变量,确保只查询目标用户的clearance。 - 优化结果获取:
fetchone()比fetchall()更适合单条结果的场景,直接返回包含目标值的元组。 - 类型转换:通过
int(result[0])将数据库返回的字符串值转为整数,符合你需要的结果类型。 - 异常防护:增加结果非空判断,避免未找到用户时触发索引访问错误。
内容的提问来源于stack exchange,提问作者Noa
相关产品推荐
相关产品推荐

