Odoo ORM 查询

Odoo 的 ORM(对象关系映射)框架提供了一种高效、简洁的方法来与数据库进行交互,无需编写原生 SQL 语句。通过 ORM,开发者可以使用 Python 对象和方法操作数据库记录。以下是 Odoo ORM 查询的一些关键点和常用操作:

1. 搜索记录 (search)

search 方法用于查询符合条件的记录,返回一个记录集。常用的用法是通过条件列表进行查询:

records = self.env['模型名称'].search([('字段名', '操作符', '值')])
  • '模型名称' 是要查询的模型,比如 res.partner
  • 条件列表是由元组组成的列表,元组中包含字段名、操作符和条件值。
  • 常用操作符:
    • '=': 等于
    • '!=': 不等于
    • '>': 大于
    • '<=': 小于等于
    • 'in': 在某个列表中
    • 'like': 模糊匹配
    • 'ilike': 不区分大小写的模糊匹配

示例:

partners = self.env['res.partner'].search([('name', 'ilike', 'John')])

2. 获取单个记录 (search)

使用 search 返回单个记录时,可以限制返回结果数量:

record = self.env['模型名称'].search([('字段名', '操作符', '值')], limit=1)

3. 读取字段值 (read / browse)

  • read 方法用于批量读取记录的指定字段,返回字典形式的字段数据。
  • browse 方法返回模型的记录集,但不直接从数据库中读取数据,数据在访问时才加载。
# 读取字段
record_data = self.env['模型名称'].search([('字段名', '操作符', '值')]).read(['字段1', '字段2'])

# 或使用 browse 获取记录集
record = self.env['模型名称'].browse(记录ID)

4. 创建记录 (create)

create 方法用于创建一条新记录。需要提供一个字典,字典的键为字段名,值为字段值。

new_record = self.env['模型名称'].create({
    '字段1': '值1',
    '字段2': '值2',
})

5. 更新记录 (write)

write 方法用于更新现有记录的字段值。它通常与 searchbrowse 配合使用。

record = self.env['模型名称'].search([('字段名', '操作符', '值')])
record.write({
    '字段1': '新值1',
    '字段2': '新值2',
})

6. 删除记录 (unlink)

unlink 方法用于删除符合条件的记录:

records = self.env['模型名称'].search([('字段名', '操作符', '值')])
records.unlink()

7. 计算统计信息 (search_count)

search_count 用于获取符合条件的记录数量,而不是返回记录集。

count = self.env['模型名称'].search_count([('字段名', '操作符', '值')])

8. 聚合和分组 (read_group)

read_group 方法用于进行类似 SQL 的分组查询,通常用于报表和统计。

grouped_data = self.env['模型名称'].read_group(
    [('字段名', '操作符', '值')],
    ['字段1', '字段2:sum'],  # 字段及聚合函数
    ['字段1']  # 分组依据
)

示例:查询客户记录

# 查询名字包含 'John' 的客户
partners = self.env['res.partner'].search([('name', 'ilike', 'John')])

# 获取第一条记录
partner = self.env['res.partner'].search([('name', 'ilike', 'John')], limit=1)

# 更新记录
partner.write({'phone': '1234567890'})

# 删除记录
partner.unlink()

# 统计符合条件的记录数量
count = self.env['res.partner'].search_count([('country_id', '=', 1)])

Odoo ORM 提供了强大的数据库操作功能,简化了开发者与数据库的交互,使用时无需关心底层 SQL 实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

弄堂汪

看了觉得好,就请我喝瓶水吧!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值