zoukankan      html  css  js  c++  java
  • Odoo 性能

    性能优化

    预提取

    # 1. 目的 减少SQL的查询次数
    # 2. self是数据集合,当第一次时,就把所有的数据都给查询出来。 缓存下来,之后在循环的值都是从缓存中获取的
    
    #    预提取的方式
    		1. 查询数据库,将查询的数据进行 python列表推导式,获得多个记录值。通过browse一次查询。即可达到预提取
    		2. 通过上下文预提取传递字段来控制预提取字段。
    				 with_context(prefetch_fields=[预提取字段列表])
    				 with_context(prefetch_fields=False) # 禁止预提取
    		3.  在 with_prefetch() 方法传递prefetch字典进行实现。 将数据分割成两部分
    				# recordset._prefetch 属性 可以知道预提取的上下文。 包含一个字典,以模型名为键名,记录id列表为值
    				
                    prefetch = self.env['base']._prefetch.  
                    recordset1 = a[:5].with_prefetch(prefetch)    # a 是记录集,针对a记录集合,进行预提取
                    recordset2 = a[5:].with_prefetch(prefetch)
    

    内存缓存 ORMCACHE

    # ormcache 缓存装饰器 
            from odoo import tools 
    
            @tools.ormcache('mode')   #  传入参数名 ,字段缓存。 
            def fetch_mode_data(self,mold):
                    pass
    
            @tools.ormcache('self.env.uid','mode')   # 缓存时,存在以来环境属性
            def fetch_mode_data(self,mold):
                    pass 
    	 
    # ormcache_context   #  依赖于上下文的值。需要传入上下文键列表,keys是缓存上下文中的字段
    	
    	@tools.ormcache_context('mode',keys=('website_id','lang'))
        def fetch_data(self,mode):
            	pass
            
         
    # ormcache_multi   缓存多条记录或ID执行操作
    	@tools.ormcache_multi('mode',multi='ids')  # ids 是记录集
        def fetch_data(self,mode,ids):
            pass
        
        
    ### ORM缓存 以字典格式缓存保存。     
    		使用x, y 参数调用该方法时且该方法的结果为x+y,缓存查询即为{(x, y): x+y}
        
    ### 清楚缓存
    	self.env[model_name].clear_caches()
        
    

    生成图像缩略图

    #  image_resize_images() 方法有助于管理3中不同大小的图像
            image = fields.Binary(attachment=True) # 1024x1024px
            image_medium = fields.Binary(attachment=True) # 128x128px
            image_small = fields.Binary(attachment=True) #64x64px
            
    #   使用方法   , 分别保存在 iamge , image_medium  和 iamge_small
    	@api.model
        def create(self,vals):
            tools.image_resize_images(vals)
            return super().create(vals)
        
        def write(self,vals):
            tools.image_resize_images(vals)
            return super().write(vals)
        
        
    # 其他方法
    		image_resize_image():		该方法用于从base64源调整图像的大小。
            image_resize_and_sharpen():	创建缩略图有时会让图像变得模糊。在这种情况下,你可以使用这个函数来锐化图像以让图像更美观。
            image_save_for_web():		这个函数用于为网站优化图像大小。它会减少图像大小而又不影响其精度。
            crop_image():							这个方法用于将图像剪切为不同尺寸。
            image_colorize():					这个方法用于为图像的透明部分上色。
    

    分组过滤read_group

    # read_group()方法广泛用于数据统计和智能统计按钮
    
    def read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True):
    		pass
        
    # domain  : domain 是用于过滤记录,	搜索条件
    # fields  分组获取字段的列表	  , 支持sql聚合函数('total:sum(amount_total)')
    		self.env['sale.order'].read_group([], ['partner_id', 'total:sum(amount_total)', 'avg_total:avg(amount_total)'], ['partner_id'])
    # groupby  分组字段记录
    # offset 分页
    # limit 限制数量
    # lazy  	该参数为True,结果会在groupby参数中仅通过第一个字段来进行分组,果中你会在__context和__domain键中获取到剩余的groupby参数及domain。  该参数值设为False,它会用groupby参数中的所有字段对数据进行分组。
    		
    
    
    #  拓展 日期分组  groupby_function
    		可以根据日、周、季度、月或年来对记录进行分组
    		self.env['sale.order'].read_group([], ['total:sum(amount_total)'], ['order_date:month'])
    

    创建和写入多条记录

    
    

    通过数据库查询访问记录

    self._cr.execute方法来执行数据库查询
    
  • 相关阅读:
    前端agl分页的写法
    分布式项目spring 配置文件的约束
    电脑维修常用硬件技术
    电脑维修常用检修软件技术
    电脑维修快速入门
    电脑维修基本流程
    re模块
    flask-本地线程-请求上下文补充
    SEO(搜索引擎优化)
    前端基础之jquery
  • 原文地址:https://www.cnblogs.com/dengz/p/14582187.html
Copyright © 2011-2022 走看看