2017-02-13 11 views
1

バージョン9でカーソルを使用することがわかりません!カーソルが必要ですか?コンソール回線での通話機能は、取得した後の例以下でodooでカーソルを使用する9

<openerp.sql_db.Cursor object at 0x7f94f4c0b0d0> 



@api.multi 
    def my_func(self): 
     cursor = self.env.cr 
     print(cursor) 

どれ単純な例をするときに、なぜカーソルを使用できますか?

答えて

4

基本的にカーソルオブジェクトは、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 

を好きなことができます。

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 DocsPostgresql Docs

ボトムライン、カーソルを使用すると、データベースを照会する方法です。あなたはそれを使用する必要はありませんが、ORMを使って入手できないデータを取得する必要がある場合は、利用可能です。

+0

優秀な説明.... Tnx man! –

+0

問題ありません。お力になれて、嬉しいです。 –

+0

非常に良い答えです。 – CZoellner

1

を使用すると、関数内でクエリを実行できます。

@api.multi 
def my_func(self): 
    cursor = self.env.cr 
    cursor.execute("select * from res_partner") 
    for partner in cursor.fetchall(): 
     ...... 
     ......