Estoy usando pandas pitón para ejecutar la consulta en MySQL. En el lado de interfaz de usuario utilizando la API Flot para representar los datos de MySQL. A continuación se muestra la aplicación existente,
query2 = f"""select time, value from NWSTAT
where time > \'{from_date}\'
and time < \'{to_date}\'"""
result2 = pd.read_sql(query2, engine)
return result2.to_json(orient='records')
Conseguir resultado abajo formato
[{"time": 1581931200000, "value": 0.0}, {"time": 1581931200000, "value": 0.0},
{"time": 1581931200000, "value": 0.0}, {"time": 1581931200000, "value": 0.0}]
A partir de esta respuesta Estoy creando estructura belwo para Flot API de interfaz de usuario en el lado de Javascript,
[[1581931200000,0],[1581931200000,0],[1581931200000,0],[1581931200000,0]]
¿Hay alguna manera de hacer esto en Python lado sí sin ningún iteraciones? Directamente desde resultado de la consulta.
Usando un servidor frasco. lado de la interfaz de usuario: jQuery, Manillar JS
EDIT: En segundo enfoque respuesta aceptada toma menos tiempo .. A continuación se muestra el tiempo necesario para que tanto el enfoque de 240k registros
First one: --- 1.6689300537109375e-06 seconds ---
Second one: --- 0.5330650806427002 seconds ---
El problema es que si tanto convertido columnas de formato de matriz de enteros numpy se cambia a los flotadores.
print (json.dumps(result2.to_numpy().tolist()))
Primera idea es crear listas de .values()
diccionarios y convertir a json
:
import json
query2 = f"""select time, value from NWSTAT
where time > \'{from_date}\'
and time < \'{to_date}\'"""
result2 = pd.read_sql(query2, engine)
return json.dumps([list(x.values()) for x in result2.to_dict(orient='records')])
O el cambio por fomrat DataFrame.to_dict
con l
las listas y luego usar zip
con listas de mapeo, último convertido a json
:
import json
query2 = f"""select time, value from NWSTAT
where time > \'{from_date}\'
and time < \'{to_date}\'"""
result2 = pd.read_sql(query2, engine)
return json.dumps(list(map(list, zip(*result2.to_dict(orient='l').values()))))