【问题标题】:Flask-sqlalchemy - Count how many times a REST endpoint(or db record) has been requestedFlask-sqlalchemy - 计算请求 REST 端点(或数据库记录)的次数
【发布时间】:2018-08-15 00:55:24
【问题描述】:

我正在制作一个烧瓶应用程序,它将与前端的其余端点一起服务。该网站用于浏览吉他和弦和标签。我希望能够计算和弦被请求的次数并持久存储此计数器。

端点如下所示:/chord/string:chord_id

向每个表添加一列并在每次访问该行时递增该值是否是个好主意?有没有其他的方法可以顺利做到这一点?

我希望我的问题很清楚。已经谢谢了!

【问题讨论】:

  • 你打算怎么处理伯爵?例如,您会在网站上显示它还是以某种逻辑使用它来确定网站内容,还是只是出于您自己的分析原因?
  • 我想在网站上显示流行和弦、艺术家等的列表。如果我能显示每个和弦的计数器也很好。但即使只保留最受欢迎的 10 位和弦艺术家也足够了。

标签: python mysql rest sqlalchemy flask-restful


【解决方案1】:

我会这样做的。

取下表,命名和弦:

+--+-----+---+-----+
|id|chord|...|count|
+--+-----+---+-----+
|01|Amaj |...|27   |
+--+-----+---+-----+
|02|Bmin |...|32   |
+--+-----+---+-----+

还有一个类似这样的烧瓶路线:

@app.route('/chord/<chord_id>', methods=['GET'])
def chord_info(chord_id):
    db = MySQLdb.connect("host", "un", "pw", "db")
    cur = db.cursor()
    cur.execute("SELECT * FROM chords WHERE id = '%s'" % chord_id)
    data = cur.fetchone()
    cur.execute("UPDATE chords SET count = count + 1 WHERE id = '%s'" % chord_id)
    try:
        db.commit()
    except:
        db.rollback()
    cur.close()
    #do something with data

此方法将为您提供一个易于查询的计数,每次访问端点时都会更新该计数。

【讨论】:

  • 谢谢,这是我目前的解决方案。另一种选择是运行将增加值的存储过程,因为我不知道您提供的解决方案例如在存在并发进程时将如何工作。我希望增量是原子的。
  • @BoranKaraca 如果您真的担心由于单个路由上的高并发命中导致数据库瓶颈,您可以缓存请求并在流量较慢时运行更新。
【解决方案2】:

已经有一个名为 flask-profiler 的库,它可以为您提供有关端点的分析,您只需与您的烧瓶应用程序集成

参考链接 - https://github.com/muatik/flask-profiler

下面是关于端点的烧瓶分析器示例图像以及它被调用的次数

【讨论】:

  • 谢谢!我认为这正是我正在寻找的端点统计信息。例如,如果它可以在您提供的示例中提供有关每个 accountId 的信息,那就太好了。我还想计算每个 ID(每个帐户)
猜你喜欢
  • 1970-01-01
  • 2017-12-15
  • 2021-01-03
  • 2021-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-13
相关资源
最近更新 更多