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

Flask-MySQLdb传递大于10的ID时出现SQL格式化错误求助

问题解决:MySQLdb参数格式化错误
  • 错误根源:你在cur.execute()中传递参数时,(id)并不是元组类型——Python会把字符串形式的id当作字符序列处理。当id是单个字符(比如"9")时,刚好能匹配SQL语句里的一个%s占位符;但id是两位数(比如"10")时,会被拆成两个独立参数("1"和"0"),而SQL仅需一个参数,因此触发格式化错误。

  • 修复代码:把参数改成包含单个元素的元组,只需在id后加个逗号,即(id,):

@app.route('/usr/<id>', methods=['GET'])
def selected_logs(id):
    response_object = {'status': 'success'}
    cur = mysql.connection.cursor()
    cur.execute('''
    SELECT
            usr.id,
            usr.corp_id,
            date_format (log.date, '%%m/%%d/%%Y') AS date
        FROM 
            (usr
            INNER JOIN corps ON corps.id = usr.corp_id)
        WHERE
            usr.corp_id = %s
        ORDER BY usr.id DESC;
    ''', (id,))  # 添加逗号,确保是单个元素的元组
    results = cur.fetchall()
    response_object['usr'] = results
    cur.close()  # 建议添加:执行完操作后关闭游标
    return jsonify(response_object)
  • 额外优化建议:
    • 路由中指定id为整数类型,避免字符串转义问题:@app.route('/usr/<int:id>', methods=['GET'])
    • 可以考虑使用上下文管理器自动管理游标,减少手动关闭的繁琐:
      with mysql.connection.cursor() as cur:
          cur.execute(...)
          results = cur.fetchall()
      

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 16:41:09