如何在OpenERP中连接到不同的数据库?
我们该如何根据使用的模块连接到不同的数据库呢?我们的情况是这样的:
我们有一个独立的应用程序,它在某个服务器上有自己的数据库,而OpenERP则运行在另一个服务器上。我们想在OpenERP中创建一个模块,这个模块可以利用独立应用程序服务器上的数据,而不是在自己的数据库中创建新的数据,这样可以吗?我们该如何更改ORM(对象关系映射)使用的连接参数,让它连接到不同的数据库呢?
当然,一种方法是使用base_synchro模块来在两个数据库之间同步所需的数据,但考虑到数据量很大,我们不想出现重复数据。另一种方法是使用xmlrpc将数据导入OpenERP,但这仍然需要在OpenERP数据库中存在这些数据。
我们该如何解决这个问题,避免数据重复呢?如何在OpenERP中创建一个基于不同数据库的模块呢?
1 个回答
1
连接外部应用程序的一种方法是创建一个叫做 连接器 的模块。现在已经有好几个连接器模块可以参考:
- Thunderbird 和 Outlook 的插件
- Joomla 和 Magento 的模块
- ‘Event Moodle’ 模块
举个例子,Joomla 连接器使用一个 Joomla 插件来处理 OpenERP 和 Joomla 之间的通信。这里用的通信协议是 XML-RPC,但你可以选择任何你想要的协议。如果外部数据库是用 Postgresql 的话,你甚至可以直接用 psycopg2 模块连接到外部数据库,但这并不推荐。不过,如果那个外部应用没有连接的 API,可能你也别无选择。
你需要了解有哪些可用的方法来连接这个外部应用,并从中选择一个。一旦你选定了合适的协议,就可以创建你的 OpenERP 模块了。
你可以使用 osv.TransientModel 对象(以前叫 osv memory)来映射存储在外部应用中的实体。与这些对象相关的表仍然会在 OpenERP 数据库中创建,但数据是临时的(过一段时间后会被删除)。