求大牛帮优化一段python代码关于循环里重复select相关操作,pythonselect,#计算7天内销量,并把每
求大牛帮优化一段python代码关于循环里重复select相关操作,pythonselect,#计算7天内销量,并把每
#计算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效率好低下。
相比程序里面的数据结构操作, 数据库操作永远是heavy的
如果你的内存足够大, 那么可以考虑将7天的raw data全部select到内存里, 然后做各种操作.
在内存不够的时候(比如现在的情况改成6个月), 你可以将数据分批输出(SELECT LIMIT), 在内存里建立好表的模型, 进行累加的处理(比如读到一条记录是红色裙子, 某月某日出售), 就是哪天的红裙子数量++
(这时候充分利用python的字典结构吧, 千万别去定义class)
总之, 不要使用数据库来计算, 而是使用代码在内存中计算.
另外, 在架构构中, 这些数据往往不需要在网页中计算, 你可以将这个程序做成一个定时的任务, 过去7天的报表, 每天跑一次或者每周跑一次, 然后直接生成一个html文件, 甚至结果直接email出去, 看需求了.
你可以这样处理,做成一个查询(空间换取时间)
product_name, goods_idA, sum(number), pdt_descA, storeAproduct_name, goods_idA, sum(number), pdt_descB, storeBproduct_name, goods_idA, sum(number), pdt_descC, storeCproduct_name, goods_idB, sum(number), pdt_descA, storeAproduct_name, goods_idB, sum(number), pdt_descB, storeBproduct_name, goods_idB, sum(number), pdt_descC, storeC
两个SQL做个连接,剩下的就是输出时去控制成你想要的结构就好了。
编橙之家文章,
相关内容
- Python模拟登录知乎,遇到403: Forbidden问题,pythonforbidden
- 循环执行函数时间时区准确性很重要吗?,时区准确性
- python splinter奇葩问题No module named browser,pythonsplinter,最
- Python如何实现对齐输出,python实现对齐,输出格式:aa
- python菜鸟最头疼的编码问题又来了,ord函数对汉字进行
- 用python watchdog监视目录可行性如何,pythonwatchdog,有人用
- Python3.0版本做web可以吗?,python3.0版本做web,在群里聊天
- Flask教程效果做不出来,谁来帮帮我NameError,flasknameerr
- 请问Django配合PyCharm开发Console,默认输出Log格式修改怎么
- flask-socketio web开发启动服务方式,,使用 flask-soc
评论关闭