如何在用户请求长时间查询时创建刷新按钮?

时间:2014-03-31 16:09:19

标签: python database flask

我在Flask微框架中编写了一个简单的应用程序。主页如下:

@app.route("/")
def index():
   # ...
   # connect to the database
   # execute a query
   # retrieve a data
   # ...
   return render_template('index.html', out=data_from_the_database)

上面的函数生成一个包含Oracle数据库数据的网页。问题是复杂的,长时间查询,数据库上的执行时间大约需要10-15分钟,服务器上的CPU时间几乎是100%。

我有一个想法来解决这个问题:

  1. 每天凌晨2:00,使用cURL工具我要打开主页,
  2. 使用pickle模块将数据保存到文件中,
  3. 在页面上创建“REFRESH”按钮,以手动刷新数据库中的实际数据。
  4. 我的主要问题是如何实现以下两个假设:

    1. 当用户在浏览器中调用主页面(“/”)时,他/她从文件中获取数据。
    2. 当用户想要新数据时,他/她按下“REFRESH”按钮并再次执行查询。
    3. 请给我一些提示,想法(或代码)如何实现这一目标?

1 个答案:

答案 0 :(得分:1)

您可以使用POST(通过表单)调用“REFRESH”部分。如下所示:

@app.route("/", methods=['GET','POST'])
def index():

    if request.method == 'POST':
        # pull data from database
        # update the data file. If does not exist, then create it first time

    # Now, retrieve the data from the data file. This will always be called even with GET request

    data = <data from file>     

    # Return the data back to the client.    
    return render_template('index.html', out=data)

在上面的代码中,您将使用POST执行2个额外步骤。第1步将从数据库中提取数据,第2步将更新您拥有的数据文件。如果数据文件尚不存在,则应在该步骤中创建。休息将是一样的。

index.html或模板中,只需确保您拥有以下表单:

<form action= {{url_for('index')}} method='POST'>
<input type='submit' value="REFRESH'>
</form>
.....