Python中SQLite按类别查询库存的参数传递问题
问题解决:SQLite查询无法返回结果的修复
你的search_ims_category_items函数存在两个核心问题:
- 执行SQL查询后没有获取并返回结果集,调用方拿到的是
None,自然无法遍历输出 - 未配置游标行工厂,默认返回的元组无法通过字典键(如
item['product_name'])访问字段
修复后的代码
修改search_ims_category_items函数:
import sqlite3 def search_ims_category_items(category): with DatabaseConnection('inventory.db') as connection: # 设置行工厂,让查询结果支持字典式字段访问 connection.row_factory = sqlite3.Row cursor = connection.cursor() # 注意:不要用f-string拼接SQL,直接用占位符即可,避免SQL注入风险 cursor.execute('SELECT * FROM inventory WHERE category = ?', (category,)) # 获取所有匹配的结果并返回 return cursor.fetchall()
关键修复点说明
- 添加结果返回逻辑:调用
cursor.fetchall()获取所有查询结果,确保函数能返回数据给调用方 - 配置row_factory:通过
connection.row_factory = sqlite3.Row,让查询返回的行对象支持用字段名(如product_name)作为键访问值,匹配调用函数中的字典式取值方式 - 移除多余的f-string:SQL参数化查询不需要用f-string包裹,直接写原始SQL字符串即可,既规范又能避免SQL注入风险
内容的提问来源于stack exchange,提问作者user20770465
相关产品推荐
相关产品推荐

