PostgreSQL - Foreign Data Wrapper for OpenERP
Here is a simple example, but via this connector we can connect to #OpenERP from PostgreSQL
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
# copyright: 2012 - Stephane Wirtel <stw@openerp.com>
from multicorn import ForeignDataWrapper
from .utils import log_to_postgres
from itertools import cycle
from datetime import datetime
from rpc import XmlRPCConnector, Connection, Object
class OpenERPForeignDataWrapper(ForeignDataWrapper):
def __init__(self, fdw_options, fdw_columns):
super(OpenERPForeignDataWrapper, self).__init__(fdw_options, fdw_columns)
self.connector = XmlRPCConnector(fdw_options['hostname'],
int(fdw_options['port']))
self.cnx = Connection(self.connector,
fdw_options['database'],
fdw_options['username'],
fdw_options['password'])
self.object_name = fdw_options['object']
def execute(self, quals, columns):
log_to_postgres(str(quals))
log_to_postgres(str(columns))
proxy = Object(self.cnx, self.object_name)
item = {}
for record in proxy.select([], fields=list(columns)):
for column in columns:
item[column] = record[column]
yield item
multicorn
I just created a small shell script to drop and create the database, and create the server.
#!/usr/bin/env bash
PGSQL=/usr/bin/psql
DATABASE=openerp_multicorn
$PGSQL -d postgres -c "DROP DATABASE IF EXISTS ${DATABASE}"
createdb $DATABASE
$PGSQL -d $DATABASE <<-EOF
CREATE EXTENSION multicorn;
CREATE SERVER multicorn_openerp
FOREIGN DATA WRAPPER multicorn
OPTIONS (wrapper 'multicorn.openerpfdw.OpenERPForeignDataWrapper');
CREATE FOREIGN TABLE external_oe_users (
login character varying,
name character varying)
SERVER multicorn_openerp OPTIONS (
hostname 'localhost',
port '8069',
database 'openerp',
username 'admin',
password 'admin',
object 'res.users'
);
SELECT login, name FROM external_oe_users where login='admin';
EOF
stephane@atlantis:~$ ./multicorn.sh
DROP DATABASE
CREATE EXTENSION
CREATE SERVER
CREATE FOREIGN TABLE
NOTICE: [login = admin]
NOTICE: set(['login', 'name'])
login | name
-------+-------
admin | Admin
(1 row)