筛选家庭收入高于指定值的城市方法及SQL语法错误修复指南
错误原因
- 语法逻辑错误:
>数值比较运算符和LIKE字符串模糊匹配运算符不能同时作用于同一个字段,二者连用不符合MySQL语法规范 - 场景使用错误:
LIKE仅用于字符串字段的模糊匹配,家庭收入中位数是数值类型字段,做大于比较不需要加LIKE和通配符% - 存在安全风险:直接拼接用户输入的字符串到SQL语句中,存在SQL注入漏洞,应当使用参数化查询传递参数
修复后的实现代码
mycursor = df.cursor() # 先把用户输入的收入转成数值类型,避免字符串和数值比较的问题,支持小数可替换为float() income = int(input("income :")) # 使用参数化查询,%s是占位符,参数通过execute的第二个参数元组传递 sql = """ SELECT zip, city, state_name, income_household_median FROM sample WHERE income_household_median > %s ORDER BY income_household_median DESC """ mycursor.execute(sql, (income,)) myresult = mycursor.fetchall() for x in myresult: print(x)
补充说明
如果需要同时对城市名、州名等字符串字段做模糊匹配,再使用LIKE运算符即可,数值大小比较直接使用>、<、=等常规比较运算符即可。
内容的提问来源于stack exchange,提问作者amirh
相关产品推荐
相关产品推荐

