首页 > 其他分享 >在odoo中fetchall() 和 dictfetchall()的区别

在odoo中fetchall() 和 dictfetchall()的区别

时间:2024-08-30 13:53:40浏览次数:12  
标签:fetchall name odoo dictfetchall cr partner row

1. 简介

在 Odoo 中,执行 SQL 查询后可以使用 fetchall() 或 dictfetchall() 方法来获取查询结果。fetchall() 返回的是一个包含元组的列表,而 dictfetchall() 返回的是一个包含字典的列表。两者的主要区别在于数据访问的方式:fetchall() 通过索引访问数据,而 dictfetchall() 通过字段名称访问数据。

2. fetchall() 示例

首先,让我们看一下使用 fetchall() 的示例。

from odoo import models, api

class PartnerExample(models.Model):
    _inherit = 'res.partner'

    @api.model
    def get_partner_info(self):
        cr = self._cr  # 获取数据库游标
        cr.execute("""
            SELECT id, name, email
            FROM res_partner
            WHERE customer_rank > 0
        """)
        
        results = cr.fetchall()  # 获取查询结果

        # 处理结果
        for row in results:
            partner_id = row[0]  # 通过索引访问
            partner_name = row[1]
            partner_email = row[2]

            # 打印结果
            print(f"ID: {partner_id}, Name: {partner_name}, Email: {partner_email}")

        return results
运行结果:

假设 res_partner 表中的数据如下:

id

name

email

customer_rank

1

John Doe

[email protected]

1

2

Jane Smith

[email protected]

2

执行该方法后,将输出:

ID: 1, Name: John Doe, Email: [email protected]
ID: 2, Name: Jane Smith, Email: [email protected]
优点和缺点:
  • 优点
  • 更加简单直接,适合小规模数据处理。
  • 缺点
  • 如果列顺序改变,代码可能会出错。
  • 可读性较差,尤其是当列数较多时。

3. dictfetchall() 示例

看一下使用 dictfetchall() 的示例。

from odoo import models, api

class PartnerExample(models.Model):
    _inherit = 'res.partner'

    @api.model
    def get_partner_info(self):
        cr = self._cr  # 获取数据库游标
        cr.execute("""
            SELECT id, name, email
            FROM res_partner
            WHERE customer_rank > 0
        """)
        
        results = cr.dictfetchall()  # 使用dictfetchall获取结果

        # 处理结果
        for row in results:
            partner_id = row['id']  # 通过字段名称访问
            partner_name = row['name']
            partner_email = row['email']

            # 打印结果
            print(f"ID: {partner_id}, Name: {partner_name}, Email: {partner_email}")

        return results
运行结果:

数据表相同,执行该方法后输出与 fetchall() 示例相同:

ID: 1, Name: John Doe, Email: [email protected]
ID: 2, Name: Jane Smith, Email: [email protected]
优点和缺点:
  • 优点
  • 使用字段名称访问数据,代码可读性更高。
  • 列顺序改变不会影响代码。
  • 缺点
  • 相比 fetchall(),可能略微增加了处理时间和内存占用。

4. 比较总结

  • fetchall():返回元组列表,数据访问通过索引完成。适合简单或性能要求较高的场景,但代码可读性较差且容易出错。
  • dictfetchall():返回字典列表,数据访问通过字段名称完成。代码更具可读性和维护性,适合处理复杂数据或长久维护的系统。

5. 实际应用场景

  • 使用 fetchall() 的场景:当你只处理少量列且数据结构很稳定时,可以选择 fetchall(),以稍微提升性能。
  • 使用 dictfetchall() 的场景:当你需要处理多列数据,并且需要代码的可读性和维护性,特别是在团队协作或长时间维护的项目中,dictfetchall() 是更好的选择。

标签:fetchall,name,odoo,dictfetchall,cr,partner,row
From: https://blog.51cto.com/u_14480405/11875671

相关文章

  • Odoo17.0 送货运费对比
    运费对比前面讲了如何在odoo中使用各种承运商来完成运费查询和发货等操作,一个很自然的场景就出来了,当我们同时启用了多个物流方式的时候,我们自然希望在发货的时候能够选择性价比最高的那个进行发货。因此,我们需要有一个物流方式对比的功能。在我们的欧姆物流解决方案中,我们实现了......
  • Odoo软件二次开发:Odoo自动化测试与持续集成
    Odoo软件二次开发:Odoo自动化测试与持续集成Odoo自动化测试基础自动化测试的重要性在软件开发过程中,自动化测试扮演着至关重要的角色。它不仅提高了测试的效率和准确性,还减少了人为错误,确保了软件质量。对于Odoo这样的复杂ERP系统,自动化测试更是必不可少,因为它可以帮助开......
  • Odoo17 门户链接访问令牌
    为了方便共享文档,odoo在每个文档模型中都加入了共享链接的快捷分享功能,用户可以方便的在想要分享的文档上将文档的链接分享给客户/供应商。我们以销售订单为例,来看一下分享功能的使用方法.生成共享链接我们在想要分享的文档上点击动作-分享,会弹出一个对话框:在显示的对话框中......
  • Odoo search、name_search、search_count、search_read、read_group
    主要包括以下几个方法及主要用途:search():搜索视图中调用search_count():视图中计算记录数时调用name_search():many2one字段搜索时调用search_read():many2one点开搜索更多时调用read_group():搜索视图分组时调用search()search方法中包含有几个子方法 根据domian取查......
  • 介绍一款新奇的开源操作系统:GodoOS
    在快节奏的现代办公环境中,一款高效、集成化的操作系统无疑是提升工作效率的利器。今天,我们要为您隆重介绍——GodoOS,一款专为内网办公环境设计的全能操作系统。它不仅仅是一个工具,更是您团队协作与文件管理的得力助手,将彻底改变您的工作方式,带来前所未有的便捷体验! 【全能办......
  • Odoo17.0基于企业微信的考勤应用
    对于使用企业微信进行办公的企业而言,使用企业微信打卡功能进行考勤非常常见,而如果能够将企业微信的打卡记录同步到odoo将极大的方便公司进行考勤统计和薪酬核算,降低人事工作的琐碎度,提供企业内部运营效率。本文就将展示如何借助企业微信高级版模块实现企业微信考勤应用的同步与应......
  • 介绍一款新奇的开源操作系统:GodoOS
    在快节奏的现代办公环境中,一款高效、集成化的操作系统无疑是提升工作效率的利器。今天,我们要为您隆重介绍——GodoOS,一款专为内网办公环境设计的全能操作系统。它不仅仅是一个工具,更是您团队协作与文件管理的得力助手,将彻底改变您的工作方式,带来前所未有的便捷体验! 【全能......
  • odoo17 环境配置
    1、PostgreSql数据库安装教程:Windows上安装PostgreSQL|菜鸟教程(runoob.com) (建议版本15以上)注意:由于Odoo是不允许用pg自带的管理员角色--postgres,所以得创一个odoo使用数据库的角色:createuserodoowithpassword'odoo';alterroleodoowithsuperuser;也可......
  • odoo基础知识1
      模块ODOO中的Related字段及Computed字段原理Related字段属性在数据库中是没有存储的,均是每次调用此字段时,通过函数计算出来。所以,若想要让其他函数引用此related字段,必须添加store=True属性(存储字段的优点是,对该字段的搜索是由数据库本身完成的。)。通过引用......
  • 自定义菜单未显示在 odoo 门户视图上
    我想在odoo门户视图上显示自定义菜单。XML文件:<?xmlversion="1.0"encoding="UTF-8"?><odoo><data><templateid="portal_my_home_loan"name="PartnerLoan"customize_show="True"inh......