如何将含参数的MySQL语句作为单个参数传入Python的execute方法
解决f-string拼接SQL时字符串参数无引号的语法错误
- 问题根源:直接用f-string插入字符串变量时,生成的SQL语句中字符串值没有被单引号包裹,不符合MySQL语法规范。
- 修正方案:在f-string的变量占位符两侧添加单引号,确保生成的SQL里字符串参数被正确包裹。
修改后的代码:
value1 = 'ABC' value2 = 'XYZ' # 在变量两侧添加单引号,保证SQL语法正确 query = f"SELECT column1, column2 from table1 where column1 = '{value1}' or column2 = '{value2}'" mycursor = mydb.cursor() mycursor.execute(query) # 注意变量名与定义的query保持一致 mydb.commit()
重要注意事项
- 这种拼接方式存在严重的SQL注入风险,如果
value1或value2来自用户输入,攻击者可通过构造恶意字符串篡改SQL逻辑,窃取或破坏数据。 - 如果变量本身包含单引号(比如
value1 = "O'Neil"),直接拼接会再次触发语法错误,需要手动转义单引号(将单个单引号替换为两个单引号):value1 = "O'Neil" # 手动转义字符串中的单引号 escaped_value1 = value1.replace("'", "''") query = f"SELECT column1, column2 from table1 where column1 = '{escaped_value1}'"
内容的提问来源于stack exchange,提问作者Nani
相关产品推荐
相关产品推荐

