我不明白在版本9中使用游标!您需要光标吗?

在下面的示例中,在控制台行中调用函数后得到:

<openerp.sql_db.Cursor object at 0x7f94f4c0b0d0>

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

什么简单的示例,何时以及为什么使用游标?

最佳答案

基本上,游标对象是Odoo用于与PostgreSQL数据库通信的接口(interface)。

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

最重要的是,游标是查询数据库的方式。您不必使用它,但是如果您发现自己需要使用ORM获取不可用的数据,则可以使用它。

关于python - 如何在Odoo中使用游标?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42201839/

10-15 01:01