求大牛帮优化一段python代码关于循环里重复select相关操作
#计算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, 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做个连接,剩下的就是输出时去控制成你想要的结构就好了。
玩蛇网文章,转载请注明出处和文章网址:http://www.iplaypy.com/wenda/wd20387.html
相关文章 Recommend
- • 关于web.py性能优化方法大家闲聊讨论下
- • 求大牛看下python源码中的__init__()作用是什么
- • 求大家帮解一道关于python分割的算法题
- • Python sqlalchemy批量数据插入优化注意事项有哪些
- • 解Python练习题源码,求大神看看有什么问题没
- • Python优化字节码遇到的问题
- • 求大神帮看下python代码中type作用是什么
- • 如何优化python mongodb批量修改任务
- • 求python大牛帮看看ctypes.string_at的问题
- • python文档中源码看不懂求大神指导
- • 数据结构优化python将线性元祖转换成字典树的方
- • 求Python读取大数据量XML文件优化方案
我要分享到:
尚未注册畅言帐号,请到后台注册
必知PYTHON教程 Must Know PYTHON Tutorials
- • python 解释器
- • python idle
- • python dir函数
- • python 数据类型
- • python type函数
- • python 字符串
- • python 整型数字
- • python 列表
- • python 元组
- • python 字典
- • python 集合
- • python 变量
- • python print
- • python 函数
- • python 类定义
- • python import
- • python help
- • python open
- • python 异常处理
- • python 注释
- • python continue
- • python pass
- • python return
- • python global
- • python assert
- • python if语句
- • python break
- • python for循环
- • python while循环
- • python else/elif
- • lambda匿名函数
必知PYTHON模块 Must Know PYTHON Modules
- • os 模块
- • sys 模块
- • re 正则表达式
- • time 日期时间
- • pickle 持久化
- • random 随机
- • csv 模块
- • logging 日志
- • socket网络通信
- • json模块
- • urlparse 解析URL
- • urllib 模块
- • urllib2 模块
- • robotparser 解析
- • Cookie 模块
- • smtplib 邮件
- • Base64 编码
- • xmlrpclib客户端
- • string 文本
- • Queue 线程安全
- • math数学计算
- • linecache缓存
- • threading多线程
- • sqlite3数据库
- • gzip压缩解压
最新内容 NEWS
- • 怎么才能用python脚本提取网页的验证码?
- • 怎么样来计算我用python所需要抓取网站的
- • Wing IDE如何能同时运行多个代码程序?
- • scrapy框架里面用link extractor怎么能提出下
- • Python里面如果设置正确的系统编码?
- • python爬取一号店信息的相关问题
- • python {}.fromkeys创建字典append添加操作列表
- • Python3版本中的 datetime.today() and datetime.n
- • redis数据库怎么样来实现全文搜索功能呢
- • django ueditor编辑器安装时怎样引用静态文
图文精华 RECOMMEND
-
scrapy框架里面用link extractor怎么能
-
python {}.fromkeys创建字典append添加操
-
python3 类型Type str doesn't support th
-
python里面为什么系统的时区是东八
-
Flask框架怎么来将jsonify返回的js
-
Python科学计算:一般是怎么处理
热点文章 HOT
- 学习Python有什么好的书籍推荐?
- Python匿名函数 Lambda表达式作用
- Python与Java、C、Ruby、PHP等编程语言有什么
- Python 正则中文网页字符串提取问题
- 如何为实时性应用存取经纬度?django my
- 想用python做个客户端,在二维码登录这个地
- 有让IDE可识别Python函数参数类型的方法吗
- Python字符串转换成列表正则疑问