diff options
| author | Xavier Morel <xmo@openerp.com> | 2014-06-20 07:54:44 +0200 |
|---|---|---|
| committer | Xavier Morel <xmo@openerp.com> | 2014-06-20 07:54:44 +0200 |
| commit | 64ca79cc4c67b778dc576fdf3f03f1b7f15c1440 (patch) | |
| tree | 8becfc88b3523e08a78097c24c92eed0f2663c16 /openerp/sql_db.py | |
| parent | 981362b2d843da6fd031fefabd20c99bdd47b4c6 (diff) | |
[IMP] remove usage of psycopg1.cursor, implement dictfetch* on openerp cursor
Diffstat (limited to 'openerp/sql_db.py')
| -rw-r--r-- | openerp/sql_db.py | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/openerp/sql_db.py b/openerp/sql_db.py index 3e401347a18..add6cc9655a 100644 --- a/openerp/sql_db.py +++ b/openerp/sql_db.py @@ -30,12 +30,11 @@ the ORM does, in fact. from contextlib import contextmanager from functools import wraps import logging -import time import uuid +import psycopg2.extras import psycopg2.extensions from psycopg2.extensions import ISOLATION_LEVEL_AUTOCOMMIT, ISOLATION_LEVEL_READ_COMMITTED, ISOLATION_LEVEL_REPEATABLE_READ from psycopg2.pool import PoolError -from psycopg2.psycopg1 import cursor as psycopg1cursor psycopg2.extensions.register_type(psycopg2.extensions.UNICODE) @@ -76,7 +75,7 @@ sql_counter = 0 class Cursor(object): """Represents an open transaction to the PostgreSQL DB backend, acting as a lightweight wrapper around psycopg2's - ``psycopg1cursor`` objects. + ``cursor`` objects. ``Cursor`` is the object behind the ``cr`` variable used all over the OpenERP code. @@ -175,7 +174,7 @@ class Cursor(object): self._serialized = serialized self._cnx = pool.borrow(dsn(dbname)) - self._obj = self._cnx.cursor(cursor_factory=psycopg1cursor) + self._obj = self._cnx.cursor() if self.sql_log: self.__caller = frame_codeinfo(currentframe(),2) else: @@ -188,6 +187,16 @@ class Cursor(object): self.cache = {} + def __build_dict(self, row): + return { d.name: row[i] for i, d in enumerate(self._obj.description) } + def dictfetchone(self): + row = self._obj.fetchone() + return row and self.__build_dict(row) + def dictfetchmany(self, size): + return map(self.__build_dict, self._obj.fetchmany(size)) + def dictfetchall(self): + return map(self.__build_dict, self._obj.fetchall()) + def __del__(self): if not self._closed and not self._cnx.closed: # Oops. 'self' has not been closed explicitly. |
