【问题标题】:Flask - realtime select from databaseFlask - 从数据库中实时选择
【发布时间】:2020-08-06 20:13:33
【问题描述】:

我有一个项目,我在 sqlite3 数据库中保存了大量数据。我想在 Flask 中创建一个简单的应用程序 - 显示来自数据库的适当数据。 每隔几分钟就会将新记录添加到数据库中 - 我希望此应用程序自动刷新。我准备了一些关于它的信息,发现可以使用socketioCan flask framework send real-time data from server to client browser?AJAX 以某种方式完成它。我试图做这样的事情:或Python Flask date update real-time,但我没能做到。

这是我现在使用的代码:

from flask import Flask, request, render_template, session, redirect
import numpy as np
import pandas as pd
import sqlite3


con = sqlite3.connect(r'path')

app = Flask(__name__)

df = pd.read_sql('select * from table1', con)
df1 = pd.read_sql('select * from table2', con)


@app.route('/', methods=("POST", "GET"))
def html_table():
    return render_template('app.html',
                           tables=[df.to_html(classes='data1'),df1.to_html(classes='data2')],
                           titles=df.columns.values)

if __name__ == '__main__':
    app.run()

模板:


<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <title>Title</title>
  </head>

  <body>

    {% for table in tables %}
            {{titles[loop.index]}}
            {{ table|safe }}
    {% endfor %}

</body>
</html>

在这种情况下,所有内容都会显示,但不能实时工作。
我在问一些关于如何做的说明或建议?我可以以某种方式使用我在这里发布的链接吗?这是我在 Flask 中的第一个应用程序,所以我不太清楚如何实现。

【问题讨论】:

  • 我不确定你所说的“实时”是什么意思,但你不能让所有的调用异步吗?由于网络连接,数据库调用速度非常慢;你有 sqlite,所以它是不同的,但如果你希望应用程序是 responsive(我假设你的意思是实时),那么你应该使用this async await paradigm
  • @MikeWilliamson 我希望数据库中的这些选择在应用程序中异步显示 - 如果数据库中只出现一些新记录,它将在不重新加载整个应用程序的情况下显示 - 目前,新记录是在我重新运行整个应用程序之前不会显示。
  • 然后你需要让你的动作“一口大小”,并以某种方式缓存差异。现在你有pd.read_sql,它可以一次抓取整个查询。那没问题;它在路线之外。但是您的路线中也有df.to_html。这意味着每次点击页面时都需要调用它。您应该在路由之外执行所有to_html,然后可能对缓存进行一些巧妙的比较,以查看它何时更改。这可能会有所帮助。

标签: python flask


【解决方案1】:

如果我有您的问题,您想要做的是在不加载页面的情况下加载数据。正如您提到的 AJAX 和 socket.io,AJAX 有助于在同一页面上获取数据,但需要重新加载。它在同一条路线上获取不同的数据,而无需转到另一条路线。Socketio 将帮助您实现这一点。因为它被使用通常在实时聊天应用程序中,这就是为什么我们不需要刷新页面来查看消息。在flask中,使用flask_socketio库来使用它,你还需要Javascript,通过结合这两个,你可以做你想做的事。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-23
    • 2012-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-20
    相关资源
    最近更新 更多