为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

茅侃侃 2019-02-23 08:44:33
很简单的一个需求,就是一个搜索的接口。根据接收到的参数进行查询。 比如:对商品表进行搜索,某个时间段某个商品的品牌。 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:是否可以对查询条件和对应的结果做缓存?
查看完整描述

1 回答

?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

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

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

查看完整回答
反对 回复 2019-03-01
  • 1 回答
  • 0 关注
  • 478 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信