如何使用 Odoo 中的 ORM 连接到 PostgreSQL 中的另一个不同数据库?

Posted

技术标签:

【中文标题】如何使用 Odoo 中的 ORM 连接到 PostgreSQL 中的另一个不同数据库?【英文标题】:How to connect to another different database in PostgreSQL with ORM in Odoo? 【发布时间】:2017-10-24 07:19:06 【问题描述】:

我在 PostgreSQL 中有一个数据库,我想通过 Odoo ORM 使用它,然后实现 RPC 的东西。我不知道如何连接到另一个数据库(在 PostgreSQL 中)。 我已经用谷歌搜索了这个,但我没有找到千里眼的解决方案或信息。有人可以告诉我吗?我应该遵循哪些步骤? 提前致谢

【问题讨论】:

【参考方案1】:

您可以执行类似以下代码的操作来创建新光标并使用使用该光标创建的环境。

from openerp.modules.registry import RegistryManager
from openerp import api

registry = RegistryManager.get('new_database')
cr = registry.cursor()
env = api.Environment(cr, self.env.uid, )
env['res.users'].search([])                     # you can run ORM methods here with the new environment

您也可以使用此方法来管理光标和环境

env.reset()         # reset environment
env.cr              # pointer to the cr cursor
cr.rollback()       # rollback
cr.execute(         # execute any SQL query
    "UPDATE res_users SET password='new_password' WHERE id=1"
)
cr.commit()         # commit cr changes
cr.close()          # close cursor

postgres 角色必须在两个数据库(当前数据库和附加数据库)上都拥有正确的权限。

注意:我无法使用env 变量和ORM 方法更新真实数据库,但它可以用于阅读目的

你也可以像这样创建光标:

with openerp.sql_db.db_connect('postgres').cursor() as cr2:
    cr2.execute('SELEC ...')

【讨论】:

以上是关于如何使用 Odoo 中的 ORM 连接到 PostgreSQL 中的另一个不同数据库?的主要内容,如果未能解决你的问题,请参考以下文章

我可以在不将实体连接到数据库表的情况下使用 ORM

odoo中的ORM操作

如何将 POST 连接到通过 AJAX 加载的不同剃须刀页面到模式弹出窗口中?

如何将 Django 频道会话分配给 ORM 中的对象?

Odoo:如何在向表单“添加新行”后发送 message_post()

使用 sequelize ORM 连接到 node.js 上的 Amazon RDS Postgres 数据库的问题