【问题标题】:How to avoid fetching data everytime in flask如何避免每次在烧瓶中获取数据
【发布时间】:2020-06-10 08:02:12
【问题描述】:

您好,我有一个 Python Flask 项目,路线如下。

@app.route("/results")
def fetch_results():
    today = date.today()
    cursor = mysql.connection.cursor()
    results = cursor.execute(f'select * from table where date >= {today} - INTERVAL 7 DAY
                              AND date < {today} ')
    if results <= 0:
        return None
    data = cursor.fetchall()
    return render_template("index.html", data = data)

我还有一个函数可以在每个星期日发送带有 index.html 内容的邮件 现在我希望 index.html 显示在接下来的 7 天内通过邮件发送的结果,直到发送新邮件。每当调用“/results”时,它都不应该获取数据。如何在不使用全局变量的情况下做到这一点?

【问题讨论】:

  • 听起来您希望发送邮件作业是创建 html 的作业,然后只有一个指向该 html 代码的静态路由,这样查看 URL 只会显示发送邮件的 html函数创建
  • 是的,完全正确。我想要那样的东西。你知道如何实现吗?

标签: python-3.x oop flask global-variables


【解决方案1】:

您可能正在寻找带有缓存的 redis(内存数据库)

redis 保持此函数的返回值处于活动状态,并且缓存将阻止刷新这些值一段时间(您可以将其设置为 1 周)

但是,您也可以在代码中通过确定“最近的星期日”的日期来执行此操作,并且每次都使用此日期而不是“今天”

所以当用户在周五(12日)查询路线时,查询仍然会查询上周日(7日)的结果

这是一个有关获取一周中最近一天的相关问题 get the last sunday and saturday's date in python

我建议这样做而不是来自不同路由或复杂缓存的全局变量,因为这不是它的主要用例,如果超过 7 天没有刷新缓存会导致不匹配(结果会开始漂移)

【讨论】:

  • 这仍然会连接到数据库并查询从上周日开始调用的每条路由的结果。我想避免每次调用路由时都获取数据。
  • 如果你想避免获取数据,那么你应该使用redis内存数据库缓存数据,并将cache.memoize装饰器设置为1周
猜你喜欢
  • 1970-01-01
  • 2020-09-03
  • 2017-12-16
  • 2015-05-19
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多