Recibo el siguiente error en la consola, donde el nombre de la columna en realidad es el valor pasado a través de la consulta:
pymysql.err.OperationalError: (1054, "Columna desconocida 'LiqNac83437' en 'cláusula where'")
Esta es mi función:
sql = f""" SELECT detallev.clave, detallev.cantidad, venta.fecha FROM detallev INNER JOIN venta ON detallev.ven_id = venta.ven_id WHERE clave = '{codigoBarras}' AND (fecha BETWEEN {fecha_inicio} AND {fecha_final});""" print(sql) with bd: with bd.cursor() as cursor: cursor.execute(sql) resultado = cursor.fetchall() cursor.close()que es llamado por:
@app.get('/{sucursal}/reporte/articulos/') def reporte_articulo(sucursal: Origenes, clave: str = '', fecha_inicial: str = '', fecha_final: str = fechaHoy(), username: str = Depends(valida_usuario)): return reporte_articulos.reporte_articulo(sucursal, clave, fecha_inicial, fecha_final)Estoy usando FastAPI, python y Mysql. Ya he intentado seguir estas soluciones sin suerte:
y varias otras soluciones fuera de stackoverflow, ya intentaron envolver el valor concatenado de diferentes formas.
Esto sucede porque usted mismo está sustituyendo los valores y, en este caso, no ha entrecomillado correctamente los campos en la cláusula BETWEEN . Ve LiqNac83437 y piensa que es un nombre de columna, porque no está entre comillas.
Por esta razón, y para evitar problemas de inyección SQL, debe dejar que el conector de la base de datos haga las comillas:
sql = """ SELECT detallev.clave, detallev.cantidad, venta.fecha FROM detallev INNER JOIN venta ON detallev.ven_id = venta.ven_id WHERE clave = ? AND fecha BETWEEN ? AND ?;""" with bd.cursor() as cursor: cursor.execute(sql, (codigoBarras, fecha_inicio, fecha_final)) resultado = cursor.fetchall() cursor.close()