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

如何解决Flask应用运行SQL语句时触发的pymysql语法报错问题

问题原因

  • 直接报错来源于WHERE子句的语法错误:你写的SQL末尾出现了重复的WHERE Orden=片段,最终拼接后生成了WHERE Orden=WHERE Orden='a365'的非法语法,不符合MySQL UPDATE语句的规范。
  • 还存在隐藏的语法问题:SET子句最后一个字段Reporte的赋值语句末尾多了多余的逗号,MySQL不允许SET字段列表的最后一项后面跟随逗号再衔接WHERE子句。
  • 额外风险:你当前直接用字符串拼接的方式填充SQL参数,存在SQL注入风险,且如果参数值包含单引号会再次触发语法报错。

解决方法

1. 修正SQL语法

修正后的SQL模板如下:

UPDATE Servi 
SET Orden = CASE WHEN Orden IS NOT NULL THEN %s END,
    Dependencia = CASE WHEN Dependencia IS NOT NULL THEN %s END, 
    Atencion = CASE WHEN Atencion IS NOT NULL THEN %s END,  
    Recibio_del_cer = CASE WHEN Recibio_del_cer IS NOT NULL THEN %s END,   
    Entrego_al_cer = CASE WHEN Entrego_al_cer IS NOT NULL THEN %s END,   
    Folio = CASE WHEN Entrego_al_cer IS NOT NULL THEN %s END,    
    Entrada = CASE WHEN Entrego_al_cer IS NOT NULL THEN %s END,     
    Equipo = CASE WHEN Equipo IS NOT NULL THEN %s END,    
    Marca = CASE WHEN Marca IS NOT NULL THEN %s END,    
    Modelo = CASE WHEN Modelo IS NOT NULL THEN %s END,    
    Serie = CASE WHEN Serie IS NOT NULL THEN %s END,    
    Unidad = CASE WHEN Unidad IS NOT NULL THEN %s END,    
    Delegacion = CASE WHEN Delegacion IS NOT NULL THEN %s END,    
    Accesorio = CASE WHEN Accesorio IS NOT NULL THEN %s END,    
    Falla = CASE WHEN Falla IS NOT NULL THEN %s END,   
    Ticket = CASE WHEN Ticket IS NOT NULL THEN %s END,    
    Status = CASE WHEN Status IS NOT NULL THEN %s END,   
    Reparacion = CASE WHEN Reparacion IS NOT NULL THEN %s END,   
    Salida = CASE WHEN Salida IS NOT NULL THEN %s END,   
    Reparo = CASE WHEN Reparo IS NOT NULL THEN %s END,   
    Servicio = CASE WHEN Servicio IS NOT NULL THEN %s END,    
    Reporte = CASE WHEN Reporte IS NOT NULL THEN %s END
WHERE Orden = %s

注意:去掉了Reporte字段末尾的多余逗号,删除了重复的WHERE Orden=片段,同时把所有%s外侧的单引号去掉,改用参数化查询传值。

2. 使用参数化查询执行SQL

Flask + PyMySQL 场景下不要手动拼接字符串填充参数,按照如下方式执行即可:

# 参数顺序要和SQL里%s的顺序完全对应,最后一个是查询条件Orden的值
params = (orden_val, dependencia_val, atencion_val, ...,  filter_orden_val)
cursor.execute(sql, params)
conn.commit()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 08:18:04