return jsonify() 不返回新数据

问题描述

过程

在 Flask 应用程序中,每 15 秒从 HTML 文件向主 python 文件 app.py 发送一个 AJAX 请求。

发送请求时:

  1. Flask 应用对不断变化的 BigQuery 表执行查询

  2. Flask 应用程序存储结果为 Pandas 数据帧。

  3. Flask 应用程序将数据帧转换为 GeoJSON 字符串。

  4. Flask 应用返回 GeoJSON 字符串。

我已经检查过,正如预期的那样,每次执行查询查询结果都不同。

High level schematic

app.py

​​>
@app.route('/updateEntireFleet',methods=["GET","POST"])
@nocache
def updateEntireFleet():
    df_data = performQuery2DataFrame()
    data_geojson = df_data.to_geojson()## Is valid and updated GeoJSON in every request.
    return jsonify(result=data_geojson)

HTML 文件 JS

$.getJSON($SCRIPT_ROOT + '/updateEntireFleet',function (data) {
    entireData = data.result;
});

问题

JS 变量 entireData 保持不变。但是,每次在 Flask 路由“updateEntireFleet”中执行查询时,data_geojson 都会按预期有新的更新值,这意味着查询成功。

所以问题肯定出在

return jsonify(result=data_geojson)

或者可能在一些与缓存相关的东西中。 在浏览器 (Chrome) 的检查器 -> 'Network' 中,请求列表显示接收到的 JSON 始终相同,而不应该如此。

我尝试了什么

删除查询的某些列

如果我删除查询的某些特定列(请参阅帖子末尾的查询),一切正常(当然,已删除列中的信息在 html 文件中不可用这一事实除外)。

在 BigQuery 中运行查询

包含所有列的查询在 BigQuery 中完美运行。每次执行结果都是最新的。

如果在 Flask 应用程序中删除标记为 (Problematic line) 的注释下方的两行,则一切正常。否则,问题仍然存在。这些行不会使查询失败,因此查询没问题。

SELECT
    id,qr_code,vehicle_type,battery_level,st_x(location::geometry) as longitude,st_y(location::geometry) as latitude,--(Problematic line)
    extract(EPOCH FROM last_ping_at)*1000 as last_ping_at_ms,--(Problematic line)
    ST_ClusterDBSCAN(location::geometry,eps := 0.0005,minPoints := 5) OVER () AS cluster_num
FROM
    vehicle v

任何帮助将不胜感激。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)