sqlalchemy下面的查询如何优化,感觉好慢.

发布于 2022-09-01 06:36:47 字数 1225 浏览 17 评论 0

很简单的一个需求,就是一个搜索的接口。根据接收到的参数进行查询。
比如:对商品表进行搜索,某个时间段某个商品的品牌。

query_sql = ModelA.query

    if request.args.has_key("end_date_time") and request.args.has_key("begin_date_time"):
        query_sql = query_sql.filter(and_(ModelA.DateOfproduction >= request.args["begin_date_time"], ModelA.DateOfproduction < request.args["end_date_time"]))

    if request.args.has_key("name"):
        query_sql = query_sql.filter(ModelA.name== request.args["name"])

    if request.args.has_key("arg01"):
        query_sql = query_sql.filter(ModelA.arg01.like("%" + request.args["arg01"] + "%"))


    data = query_sql.all()
    count = len(data)

    if request.args.has_key("page"):
        page_size = int(request.args["page_size"]) if request.args["page_size"] else 128
        page_number = int(request.args["page"])

        start_index = (page_number - 1) * page_size
        end_index = min(page_number * page_size, count)
        data = query_sql.order_by(ModelA.id)[start_index : end_index]
    else:
        data = query_sql.all()

    return jsonify({"data": [x.export_data() for x in data], "count": count})

1:个人觉得为了得到count多查询一便影响到了性能,这个还有其他办法获得count的值?
2:是否可以对查询条件和对应的结果做缓存?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦纸 2022-09-08 06:36:47
  1. .count()本身就非常慢,因为查询必须数一遍记录的个数。可能的方法比如根据各种查询条件建立很多计数器,在增加记录的时候把计数器也都+1.

  2. 一种粗暴的办法就是使用memcache,直接用查询的sql的hash做key来保存结果

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文