通常我們想要在odoo中使用SQL語法時,都在model當中使用以定義方法的方式:
def raw_sql(self):
query = """
SELECT
id, name, author
FROM
my_library;
"""
self.env.cr.execute(query)
print('self.env.cr.fetchall:', self.env.cr.fetchall())
我們有三種取值的方式self.env.cr.fetchall()
self.env.cr.fetchone()
self.env.cr.dictfetchall()
當報表的格式比較特殊的時候,我們就會使用他:
@api.model_cr
def init(self):
tools.drop_view_if_exists(self.env.cr, self._table)
query = """
(
SELECT
min(library.id) as id,
create_uid,
avg(input_number) AS average_input_number
FROM
my_library AS library
GROUP BY library.create_uid
);
"""
self.env.cr.execute(query)
另外還可以透過以下三個步驟來得到想要的record:
def select_sql(self):
sql_code = "SELECT MIN(LENGTH(code)) FROM library_rent;"
self._cr.execute(sql_code)
store = self._cr.dictfetchall()[0]['min']
首先我們先將SQL語法儲存在sql_code
中,在來使用self._cr.execute(sql_code)
來執行,
之後將查詢結果的key='min'
的值,儲存在store
中。
◆self._cr.execute()
執行 SQL 查詢
◆self._cr.dictfetchall()
取得查詢結果,它會返回一個包含查詢結果的清單,
每個結果都以字典的形式表示
※使用原生SQL時要特別注意,因為它是直接對DB做操作,並沒有ORM這層。