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

从mysqlclient迁移至mysql-connector-python时,字面量%s的查询兼容方案求助

解决mysql-connector-python中字面量%s的写入问题

针对你从mysqlclient迁移到mysql-connector-python时遇到的字面量%s无法通过%%s转义的问题,除了将%s作为参数绑定外,还有以下几种实用方案:

  • 使用MySQL字符串拼接函数生成字面量
    把%和s拆分开,通过MySQL的CONCAT函数在数据库端拼接成%s,这样连接器不会识别到完整的%s占位符:

    cursor.execute('INSERT INTO foo(bar, baz) VALUES (CONCAT(\'%\', \'s\'), %s)', ('abc',))
    
  • 用十六进制编码直接写入
    %的ASCII码是37(十六进制25),s的ASCII码是115(十六进制73),直接在SQL中使用十六进制值0x2573,MySQL会自动转换为字符串%s:

    cursor.execute('INSERT INTO foo(bar, baz) VALUES (0x2573, %s)', ('abc',))
    
  • 切换参数占位符风格
    mysql-connector-python支持多种参数占位符风格,比如将默认的pyformat(%s)切换为qmark(?)或format({}),这样原SQL中的%s就会被当作字面量处理:

    # 设置游标参数风格为qmark
    cursor = conn.cursor(paramstyle='qmark')
    # 使用?作为参数占位符,%s作为字面量
    cursor.execute('INSERT INTO foo(bar, baz) VALUES (\'%s\', ?)', ('abc',))
    

    注意:这个方案需要统一修改所有查询的占位符格式,适合大规模迁移场景。

内容的提问来源于stack exchange,提问作者jph

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 17:33:10