您好,匿名用户
随意问技术百科期待您的加入

求一段Flask(SQLAlchemy)的代码优化,关于在一个循环里重复select的 .

0 投票
#计算7天内销量,并把每件商品的不同尺码库存分别显示
    day7=today-datetime.timedelta(days=7)
    logs7=db.session.execute("SELECT product_name,goods_id,sum(number) as sellsum FROM sdb_sell_logs where createtime>:createtime group by goods_id order by sum(number) desc limit 0,20",{"createtime":datetime_timestamp(day7.strftime("%Y-%m-%d 00:00:00"))}).fetchall()
    goods_store7={}
    for item in logs7:
        store=db.session.execute("SELECT pdt_desc,store from sdb_products where goods_id=:goods_id",{"goods_id":item.goods_id}).fetchall()
        item_store=[]
        for store_item in store:
            item_store.append([store_item.pdt_desc,store_item.store])
        goods_store7[item.goods_id]=item_store

这段代码要怎么优化请问?

感觉这个for item in logs7:的循环里要处理N次的select效率好低下。

用户头像 提问 2013年 11月1日 @ Brand 上等兵 (185 威望)
分享到:

1个回答

0 投票

你可以这样处理,做成一个查询(空间换取时间)

product_name, goods_idA, sum(number), pdt_descA, storeA
product_name, goods_idA, sum(number), pdt_descB, storeB
product_name, goods_idA, sum(number), pdt_descC, storeC
product_name, goods_idB, sum(number), pdt_descA, storeA
product_name, goods_idB, sum(number), pdt_descB, storeB
product_name, goods_idB, sum(number), pdt_descC, storeC

两个SQL做个连接,剩下的就是输出时去控制成你想要的结构就好了。

用户头像 回复 2013年 10月4日 @ Janna 下士 (667 威望)
提一个问题:

相关问题

0 投票
1 回复 1 阅读
用户头像 提问 2014年 6月7日 @ Ziggs 上等兵 (345 威望)
0 投票
1 回复 70 阅读
0 投票
0 回复 36 阅读
0 投票
1 回复 60 阅读
0 投票
1 回复 57 阅读

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...