亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

求一段Flask(SQLAlchemy)的代碼優化,關于在一個循環里重復select的 .

求一段Flask(SQLAlchemy)的代碼優化,關于在一個循環里重復select的 .

開滿天機 2019-04-06 08:31:56
#計算7天內銷量,并把每件商品的不同尺碼庫存分別顯示day7=today-datetime.timedelta(days=7)logs7=db.session.execute("SELECTproduct_name,goods_id,sum(number)assellsumFROMsdb_sell_logswherecreatetime>:createtimegroupbygoods_idorderbysum(number)desclimit0,20",{"createtime":datetime_timestamp(day7.strftime("%Y-%m-%d00:00:00"))}).fetchall()goods_store7={}foriteminlogs7:store=db.session.execute("SELECTpdt_desc,storefromsdb_productswheregoods_id=:goods_id",{"goods_id":item.goods_id}).fetchall()item_store=[]forstore_iteminstore:item_store.append([store_item.pdt_desc,store_item.store])goods_store7[item.goods_id]=item_store這段代碼要怎么優化請問?感覺這個foriteminlogs7:的循環里要處理N次的select效率好低下。
查看完整描述

2 回答

?
holdtom

TA貢獻1805條經驗 獲得超10個贊

相比程序里面的數據結構操作,數據庫操作永遠是heavy的如果你的內存足夠大,那么可以考慮將7天的rawdata全部select到內存里,然后做各種操作.在內存不夠的時候(比如現在的情況改成6個月),你可以將數據分批輸出(SELECTLIMIT),在內存里建立好表的模型,進行累加的處理(比如讀到一條記錄是紅色裙子,某月某日出售),就是哪天的紅裙子數量++
(這時候充分利用python的字典結構吧,千萬別去定義class)總之,不要使用數據庫來計算,而是使用代碼在內存中計算.另外,在架構構中,這些數據往往不需要在網頁中計算,你可以將這個程序做成一個定時的任務,過去7天的報表,每天跑一次或者每周跑一次,然后直接生成一個html文件,甚至結果直接email出去,看需求了.
                            
查看完整回答
反對 回復 2019-04-06
  • 2 回答
  • 0 關注
  • 370 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號