我不明白在版本9中使用遊標!你需要光標嗎?在odoo中使用光標9
在下面的例子中後控制檯線路通話功能得到:
<openerp.sql_db.Cursor object at 0x7f94f4c0b0d0>
@api.multi
def my_func(self):
cursor = self.env.cr
print(cursor)
任何簡單的例子時,爲什麼使用遊標?
我不明白在版本9中使用遊標!你需要光標嗎?在odoo中使用光標9
在下面的例子中後控制檯線路通話功能得到:
<openerp.sql_db.Cursor object at 0x7f94f4c0b0d0>
@api.multi
def my_func(self):
cursor = self.env.cr
print(cursor)
任何簡單的例子時,爲什麼使用遊標?
基本上游標對象是Odoo用來與postgresql數據庫通信的接口。
在Odoo中,您通常不需要直接與它進行交互,但有時您會遇到Odoo ORM只是不給您想要的結果的情況。這是你需要使用數據庫遊標的時候。對於使用ORM無法實現的sql查詢。
您也可以使用數據庫遊標來克服安全限制,儘管有人會說這不是可取的。然而,我不會評判你。
Odoo中的遊標是數據庫遊標。它基本上是一個psycopg2數據庫遊標。我相信它已經被Odoo修改過,但是不能給你一個修改內容的具體例子。
這裏有一些簡單的例子。
@api.multi
def sql_example(self):
sql = "SELECT * FROM table_name WHERE col = 'some_value'"
上面的查詢可以任何你想要的
self.env.cr.execute(sql)
for record in self.env.cr.fetchall():
# YOUR CODE HERE
如果要執行UPDATE /刪除/創建函數必須提交更改。
sql = "UPDATE table_name SET col = 'some_value' WHERE col = 'some_value'"
self.env.cr.execute(sql)
self.env.cr.commit()
有時您可能會發現緩存數據正在返回您的查詢中。你可能需要刷新這個。
self.env.invalidate_all()
所以,如果你想更好地瞭解光標對象是你可以查看文檔
Tutorials Point,Psycopg2 Docs,Postgresql Docs
底線是什麼,光標是你如何查詢數據庫。您不必使用它,但是如果您發現自己需要獲取使用ORM不可用的數據,則可以使用它。
您可以使用cr在您的函數中執行查詢。
@api.multi
def my_func(self):
cursor = self.env.cr
cursor.execute("select * from res_partner")
for partner in cursor.fetchall():
......
......
非常好的描述.... Tnx人! –
沒問題。樂於幫助。 –
非常好的答案。 – CZoellner