很簡單的一個需求,就是一個搜索的接口。根據接收到的參數進行查詢。
比如:對商品表進行搜索,某個時間段某個商品的品牌。
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個贊
.count()本身就非常慢,因為查詢必須數一遍記錄的個數??赡艿姆椒ū热绺鶕鞣N查詢條件建立很多計數器,在增加記錄的時候把計數器也都+1.
一種粗暴的辦法就是使用memcache,直接用查詢的sql的hash做key來保存結果
添加回答
舉報
0/150
提交
取消