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
相关产品推荐
相关产品推荐

