【odoo】odoo常用的ORM方法

概要

        在Odoo中,ORM(对象关系映射,Object-Relational Mapping)方法是一种将Python对象映射到数据库表的方法。Odoo的ORM系统使开发者能够使用高级的Python代码而不是复杂的SQL语句来操作数据库。Odoo的ORM方法主要用于创建、读取、更新和删除数据库记录,以及执行复杂的数据库查询和管理关系数据。

方法源码所在目录:

 个人理解 ==> Odoo orm方法其实就是sql的封装方法。

常用的ORM方法

def create(self, vals_list):

new_record = self.env['model.name'].create({
    'field1': value1,
    'field2': value2,
    # 其他字段
})

def unlink(self):

records = self.env['model.name'].search([('field_name', '=', value)])
records.unlink()

 def write(self, vals):

records = self.env['model.name'].search([('field_name', '=', value)])
records.write({
    'field1': new_value1,
    'field2': new_value2,
    # 其他字段
})

def search_read(self, domain=None, fields=None, offset=0, limit=None, order=None, **read_kwargs):

records = self.env['model.name'].search([('field_name', '=', value)])

 def browse(self, ids=None):

record = self.env['model.name'].browse(record_id)

 def read(self, fields=None, load='_classic_read'):

records = self.env['model.name'].search([('field_name', '=', value)])
records.read(['field1', 'field2'])

其他

 def name_get(self):

record = self.env['model.name'].browse(record_id)
name = record.name_get()

 def name_search(self, name='', args=None, operator='ilike', limit=100):

records = self.env['model.name'].name_search(name='record_name')

 def with_context(self, *args, **kwargs):

self.env['model.name'].with_context(lang='fr_FR').search([('field_name', '=', value)])

ORM的优势、局限性、能力欠缺

优势

  • 简化数据库操作: ORM可以将数据库表映射到Python对象,使得数据库操作更加直观和简便。例如,CRUD(创建、读取、更新、删除)操作都可以通过简单的ORM方法来完成。

  • 提高开发效率: ORM提供了高级抽象层,减少了直接编写SQL的需求,使得开发者可以更快地实现功能。

  • 自动处理关系: ORM可以轻松处理数据库中的一对多、多对多等关系,自动生成联接表和外键关系。

  • 与Python代码集成: ORM与Python代码无缝集成,使得业务逻辑和数据访问逻辑可以在同一语言环境中实现。

局限性

  • 性能问题: ORM生成的SQL查询可能不如手写的SQL高效。在处理复杂查询或大数据量时,ORM可能会导致性能问题。

  • 复杂查询的局限性: 对于非常复杂的查询,ORM的抽象层可能会变得过于复杂和笨拙,手写SQL反而更简单和高效。

  • 数据库特性限制: ORM通常只能支持常见的数据库特性和通用的SQL功能,对于特定数据库的高级特性或优化可能无法很好地支持。

  • 调试和维护困难: 由于ORM生成的SQL查询是自动的,有时在调试性能问题或查询错误时,可能需要深入理解ORM的实现机制,调试和维护变得更加复杂。

能力欠缺

  • 复杂的报表和分析: 复杂的报表和数据分析通常需要高度优化的查询,这些查询可能需要手写SQL来确保性能。

  • 大数据处理: 在处理大数据集时,ORM的性能可能不够,需要使用专门的大数据处理工具和技术,例如Hadoop或Spark。

  • 数据库特定优化: 某些情况下需要利用数据库特定的特性或优化技术(如索引、存储过程、触发器等),这些可能需要手写SQL或其他数据库操作。

  • 实时性要求: 对于一些高实时性要求的应用,ORM的抽象层可能会带来额外的开销,需要直接操作数据库来优化性能。

建议

虽然ORM不一定能解决所有业务需求,但它是一个非常有用的工具,可以大大简化开发工作。在使用ORM的同时,了解其局限性并在必要时结合手写SQL或其他技术,能够更好地满足业务需求。以下是一些综合建议:

  1. 常规操作使用ORM: 对于常规的CRUD操作和简单查询,可以放心使用ORM,提高开发效率和代码可维护性。

  2. 性能优化时考虑手写SQL: 当遇到性能瓶颈或复杂查询时,考虑使用手写SQL来优化性能。

  3. 结合数据库特性: 在需要利用数据库特定特性或进行高级优化时,使用数据库提供的功能和工具。

  4. 定期评估和监控: 定期评估和监控应用的性能,并根据需要调整ORM和SQL的使用,以确保系统的高效运行。

通过结合使用ORM和手写SQL,可以在提高开发效率的同时,确保系统的性能和灵活性,满足各种复杂的业务需求。

小结

        多写多敲多思考,毕竟,知己知彼才能看懂源码。

Tip:本人才学尚浅,如有纰漏,还请不吝赐教!

相关推荐

  1. webRtc常用方法

    2024-06-14 09:16:04       27 阅读
  2. pyDAL一个pythonORM(8) pyDALcommit()方法

    2024-06-14 09:16:04       33 阅读
  3. 后端常用方法

    2024-06-14 09:16:04       39 阅读
  4. git 常用使用方法

    2024-06-14 09:16:04       38 阅读
  5. RedisTemplate一些常用方法

    2024-06-14 09:16:04       19 阅读
  6. js 字符串常用方法

    2024-06-14 09:16:04       12 阅读
  7. loadash常用函数方法

    2024-06-14 09:16:04       19 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-14 09:16:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-14 09:16:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-14 09:16:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-14 09:16:04       18 阅读

热门阅读

  1. C++Primer Plus编程题(第五章)

    2024-06-14 09:16:04       7 阅读
  2. Webrtc支持FFMPEG硬解码之解码实现(三)

    2024-06-14 09:16:04       11 阅读
  3. ### RabbitMQ五种工作模式:

    2024-06-14 09:16:04       9 阅读
  4. 【设计模式】结构型设计模式之 桥接模式

    2024-06-14 09:16:04       7 阅读
  5. 威胁情报多场景下的实战技术落地

    2024-06-14 09:16:04       9 阅读
  6. Hudi extraMetadata 研究总结

    2024-06-14 09:16:04       7 阅读
  7. 大语言模型学习笔记-1

    2024-06-14 09:16:04       6 阅读
  8. MySQL CDC

    2024-06-14 09:16:04       9 阅读
  9. 璨与序列 题解(stl,dfs)

    2024-06-14 09:16:04       8 阅读
  10. 后端主流框架--Spring

    2024-06-14 09:16:04       5 阅读
  11. 响应式网页开发方法与实践

    2024-06-14 09:16:04       6 阅读
  12. 602. 好友申请 II :谁有最多的好友

    2024-06-14 09:16:04       6 阅读