python - 将sql查询转换为ORM Odoo
问题描述
我在 ODOO 框架的模型文件中有一个函数。我刚刚在我的函数中遇到了 SQL 查询。我只想使用 Odoo 框架将 SQL 查询转换为 ORM。喜欢、创建、搜索、浏览它已经拥有的内置功能。对于下面函数中的两个查询,我只需要一些示例,例如我们如何将其转换为 ORM 并提供良好的解释。这样我也可以对其他查询进行相同的处理。
功能:
def bill(self,data):
id = data.get('id', False)
if data:
chge = []
s_Date = data['start_date']
e_Date = data['end_date']
query = """SELECT "endpoll","table_name","kcp","plan","startpoll",id FROM
bill WHERE ((("endpoll" >= '%s') OR "endpoll" IS NULL ) AND ("startpoll" <= '%s') AND
("customer" = %s) AND ("active" in ('Y','N'))) ORDER BY "startpoll" """ % (
s_Date, e_Date, id)
self._cr.execute(query)
status_records = self._cr.dictfetchall()
if not status_records:
return []
gst = 0
for records in status_records:
icp_id = record['ikp']
varcharge = 0
query2 = """SELECT "read_date" FROM dailycharges WHERE (("billstatus" = %s)
AND ("status" = 'B')) ORDER BY "read_date" desc limit 1""" % (
record['id'])
self._cr.execute(query2)
maxbill = self._cr.fetchone()
if maxbill:
unbill = datetime.strptime(maxbill[0]
else:
unbill = record['Start_Date']
start_date = max(invoice_start_date, str(unbill))
return data
此函数中有两个简单的查询。我需要将它们转换为 ORM。提前致谢。
解决方案
它们可以用该search
方法替换。WHERE
子句将转换为搜索域,ORDER
BY 将替换为顺序参数 ( order='read_date desc'
),并且LIMIT
子句可用作参数 ( limit='1'
)。
例如,第二个选择查询可以替换为:
record = self.env['dailycharges'].search([('billstatus', '=', record['id']), ('status', '=', 'B')], order='read_date DESC', limit=1)
# read_date = record.read_date
编辑:
您可以使用search_read
允许您指定要读取的字段的方法。
Odoo 提供了一个search_read()
快捷方式,顾名思义,它相当于search()后跟read(),但避免了执行两个请求并保留 id。
它的参数类似于search()的,但它也可以获取一个列表fields
(如read(),如果未提供该列表,它将获取匹配记录的所有字段)
例子:
self.env['dailycharges'].search_read([('billstatus', '=', record['id']), ('status', '=', 'B')], ['read_date'], order='read_date DESC', limit=1)
[{'id': ?, 'read_date': ?}]
推荐阅读
- php - 按另一个数组对 laravel 集合进行排序
- c# - 如何在 C# 中将 OpenXML WordprocessingDocument 转换为 Word Interop 的文档
- android - 错误:找不到属性“com.xyz.abc:itemBackground”
- javascript - 下载带有 url React 的图片
- jquery - 带有 IF 语句的实时计算 JQuery
- php - FosRestBundle 单个数组和可选的关联数组
- python - 使用 ShellExecute 无法打开超链接失败(错误 2)
- botframework - Microsoft Bot 与 Whatsapp 的集成
- c# - 从 datagridview 中删除多行后,索引超出范围?C#
- d3.js - 在 div 框底部显示条形图