Python3.x使用sqlite3模块从数据库提取整数的方法及返回值问题
解决方案
问题本质
cursor.fetchall()返回的结构是列表嵌套元组,每个元组对应一行查询结果,元组内的元素对应每行的每一列值。你查询的是单列单行数据,所以得到[(26.0,)]的结构。- 结果为26.0浮点数的原因是你的
Employee表中HourlyRate字段类型为REAL(浮点型),sqlite3默认会按字段类型返回对应的值。
解决方法
快速修改现有代码
直接取值后转整数即可,同时优化查询写法、修复SQL注入风险,修改后的代码如下:
def calculatewage(self): employeeID = self.employee1.get() employeehrs = self.employee1hrs.get() with sqlite3.connect("ProjectDatabase") as db: cursor = db.cursor() # 用参数化查询代替字符串拼接,避免SQL注入漏洞 code = "SELECT HourlyRate FROM Employee WHERE EmployeeID = ?" cursor.execute(code, (employeeID,)) # 单行查询用fetchone,直接返回行元组,不需要再从列表取第一个元素 output = cursor.fetchone() if output: # 判空,避免没有匹配到数据时报错 hourly_rate = int(output[0]) print(hourly_rate) # 这里拿到的就是你需要的整数26 else: # 可自定义无匹配数据的处理逻辑 print("未找到对应员工信息") return
根源解决(可选)
如果希望后续查询该字段默认返回整数,不需要每次转换,可以修改表结构,把HourlyRate字段的类型从REAL改成INTEGER,插入数据时也按整数类型存入即可。
内容的提问来源于stack exchange,提问作者Oliver Link
相关产品推荐
相关产品推荐

