Python中编写MySQL查询语句时'P'参数不被识别该如何解决
问题原因
报错是因为Python字符串的边界引号和SQL内部的单引号发生了冲突:你使用单引号
'包裹整个查询字符串,SQL语句中'P'的单引号会被Python误判为整个字符串的结束标记,进而导致语法解析错误,无法识别后续的P参数。
可用解决方案
方法1:更换外层字符串的引号类型(最简单)
外层使用双引号或者三双引号包裹SQL语句,即可和内部的单引号区分开,换行写也不会有语法问题:
# 单行写法 Query = "SELECT price, book, FORMAT((price / book)*100,'P') as price_ratio FROM book_db" # 换行保留可读性写法 Query = """ SELECT price, book, FORMAT((price / book)*100,'P') as price_ratio FROM book_db """方法2:转义内部的单引号
不想修改外层引号的话,给SQL内部的单引号前加反斜杠
\转义即可:Query = ('SELECT price, book,' 'FORMAT((price / book)*100,\'P\') as price_ratio ' 'FROM book_db')方法3:使用参数化查询(生产环境推荐)
实际业务场景建议用参数化查询传递参数,既能避免引号冲突,还能防范SQL注入风险,以pymysql为例写法如下:
# 已初始化数据库连接conn的前提下 cursor = conn.cursor() format_param = 'P' sql = "SELECT price, book, FORMAT((price / book)*100,%s) as price_ratio FROM book_db" cursor.execute(sql, (format_param,)) # 后续获取查询结果逻辑不变
内容的提问来源于stack exchange,提问作者Dhu
相关产品推荐
相关产品推荐

