iT邦幫忙

2023 iThome 鐵人賽

DAY 10
0
Odoo

Odoo16 入門介紹系列 第 10

Day10_odoo_使用SQL

  • 分享至 

  • xImage
  •  

使用原生SQL語法

○ RAW SQL

通常我們想要在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()

○ SQL view

當報表的格式比較特殊的時候,我們就會使用他:

@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這層。


上一篇
Day9_odoo_Controller
下一篇
Day11_odoo_Many2one
系列文
Odoo16 入門介紹30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言