Python&MySQL场景下如何实现SQL Select与类别值的参数化分离
完全可以实现你要的改造,参数化查询适配所有SQL操作场景,而且这种写法能避免SQL注入风险,是非常规范的数据库操作写法。
改造逻辑和你写的insert函数逻辑完全一致:
- 给
get_category函数增加category形参,用来接收外部传入的查询分类 - 把SQL语句里硬编码的固定分类
'Groceries'替换为参数占位符%s,注意这里不需要给%s加单引号,MySQL连接驱动会自动处理参数的类型转义 - 把传入的
category参数打包成元组作为execute方法的第二个参数传入即可,这里要注意如果元组只有一个元素,必须在元素后面加逗号,否则Python会把它识别为单个变量而不是元组,会触发参数格式错误
改造后的代码示例:
# Get a given category from the database def get_category(category): sql = "SELECT * FROM Exp1 WHERE category = %s ORDER BY date DESC" val = (category,) mycursor.execute(sql, val) for x in mycursor: print(x)
调用时直接传入你要查询的分类即可,比如要查询Groceries分类,直接执行get_category("Groceries")就可以得到对应结果。
内容的提问来源于stack exchange,提问作者FayZ
相关产品推荐
相关产品推荐

