You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 21:15:04