On Mon, 18 Sep 2006 11:53:00 +0200
Simon Pamies <[EMAIL PROTECTED]> wrote:
> I just downloaded PyGreSQL 3.8.1 and noticed that there is no dict
> cursor support included. Also the close method on the pgdbCursor class
> is missing.
> 
> Patch here:
> http://files.banality.de/public/pgdb.py.diff

Looks fine.  However, your patch as delivered mixes spaces and tabs.  I
have attached your patch with this fixed and otherwise unchanged.  In
general patches should be attached rather than referenced so that they
may be archived in this list.

I also see that you are overwriting the close method with a do-nothing
method.  Was this a mistake?

-- 
D'Arcy J.M. Cain
PyGreSQL Development Group
http://www.PyGreSQL.org
--- pgdb.py     2006-06-02 15:43:17.000000000 +0200
+++ /opt/ZEnv2/Python-2.4.3/lib/python2.4/site-packages/pgdb.py 2006-09-18 
09:47:29.000000000 +0200
@@ -27,6 +27,17 @@
 
        connection.cursor() # open a cursor
 
+       # you can pass in a custom row factory
+       # e.g. a dict_factory
+
+       def dict_factory(caller, row):
+               d = {}
+               for idx, col in enumerate(caller.description):
+                       d[col[0]] = row[idx]
+               return d
+
+       cursor.row_factory = lambda cur, row: dict_factory(cur, row)
+
        cursor.execute(query[, params])
        # Execute a query, binding params (a dictionary) if they are
        # passed. The binding syntax is the same as the % operator
@@ -148,6 +159,9 @@
        def __init__(self, src, cache):
                self.__cache = cache
                self.__source = src
+
+               # default row factory returns result unchanged
+               self.row_factory = lambda cur, row: row
                self.description = None
                self.rowcount = -1
                self.arraysize = 1
@@ -239,12 +253,14 @@
                for r in res:
                        row = []
                        for i in range(len(r)):
-                               row.append(self.__cache.typecast(
+                                               val = self.__cache.typecast(
                                                self.description[i][1],
                                                r[i]
                                        )
-                               )
-                       result.append(row)
+
+                               row.append(val)
+
+                       result.append( self.row_factory(self, row) )
                return result
 
        def nextset(self):
@@ -256,6 +272,8 @@
        def setoutputsize(self, size, col = 0):
                pass
 
+       def close(self):
+               pass
 
 class _quoteitem(dict):
        def __getitem__(self, key):
_______________________________________________
PyGreSQL mailing list
[email protected]
http://mailman.vex.net/mailman/listinfo/pygresql

Reply via email to