mirror of
https://github.com/psycopg/psycopg2.git
synced 2024-11-25 10:23:43 +03:00
Fixed pickling of DictRow objects too
This commit is contained in:
parent
99bedd1bb2
commit
6df6e6adfe
2
NEWS
2
NEWS
|
@ -37,7 +37,7 @@ What's new in psycopg 2.4.6
|
|||
- Fixed pickling of FixedOffsetTimezone objects (ticket #135).
|
||||
- Release the GIL around PQgetResult calls after COPY (ticket #140).
|
||||
- Fixed empty strings handling in composite caster (ticket #141).
|
||||
- Fixed pickling of RealDictRow objects.
|
||||
- Fixed pickling of DictRow and RealDictRow objects.
|
||||
|
||||
|
||||
What's new in psycopg 2.4.5
|
||||
|
|
|
@ -184,7 +184,14 @@ class DictRow(list):
|
|||
def __contains__(self, x):
|
||||
return x in self._index
|
||||
|
||||
# grop the crusty Py2 methods
|
||||
def __getstate__(self):
|
||||
return self[:], self._index.copy()
|
||||
|
||||
def __setstate__(self, data):
|
||||
self[:] = data[0]
|
||||
self._index = data[1]
|
||||
|
||||
# drop the crusty Py2 methods
|
||||
if sys.version_info[0] > 2:
|
||||
items = iteritems; del iteritems
|
||||
keys = iterkeys; del iterkeys
|
||||
|
|
|
@ -205,6 +205,20 @@ class ExtrasDictCursorTests(unittest.TestCase):
|
|||
for i, r in enumerate(curs):
|
||||
self.assertEqual(i + 1, curs.rownumber)
|
||||
|
||||
def testPickleDictRow(self):
|
||||
import pickle
|
||||
curs = self.conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
|
||||
curs.execute("select 10 as a, 20 as b")
|
||||
r = curs.fetchone()
|
||||
d = pickle.dumps(r)
|
||||
r1 = pickle.loads(d)
|
||||
self.assertEqual(r, r1)
|
||||
self.assertEqual(r[0], r1[0])
|
||||
self.assertEqual(r[1], r1[1])
|
||||
self.assertEqual(r['a'], r1['a'])
|
||||
self.assertEqual(r['b'], r1['b'])
|
||||
self.assertEqual(r._index, r1._index)
|
||||
|
||||
def testPickleRealDictRow(self):
|
||||
import pickle
|
||||
curs = self.conn.cursor(cursor_factory=psycopg2.extras.RealDictCursor)
|
||||
|
|
Loading…
Reference in New Issue
Block a user