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

从SQLite切换为pymysql后SQL查询生成函数报错如何解决?

问题产生原因
  • 核心差异是SQLite与PyMySQL使用的参数占位符规范不同:
    • SQLite的Python驱动采用?作为位置参数的占位符
    • PyMySQL遵循Python DB API规范,采用%s作为预编译语句的参数占位符
  • 原有代码生成的SQL语句中使用?作为占位符,PyMySQL无法识别该格式的占位符,内部执行时会用%操作符把转义后的参数替换到SQL中,此时占位符数量和参数数量不匹配,就抛出了参数未全部完成格式化的报错。
修复方案

仅需要修改update_format_with_args函数中生成占位符的逻辑,将?替换为%s即可,修改后的完整代码如下:

def update_format_with_args(sql, parameters: dict):
    # 把原有的?占位符替换为pymysql兼容的%s
    values = ", ".join([
        f"{item} = %s" for item in parameters
    ])
    sql = sql.replace("XXX", values)
    return sql, tuple(parameters.values())

def update_settingsx(**kwargs):
    with connection.cursor() as db:
        sql = f"UPDATE main_settings SET XXX "
        sql, parameters = update_format_with_args(sql, kwargs)
        db.execute(sql, parameters)
        db.commit()

注意:如果项目中还有其他适配SQLite生成的带?占位符的SQL语句,也需要统一替换为%s才能在PyMySQL中正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 00:06:06