diff options
author | Daniele Varrazzo <daniele.varrazzo@gmail.com> | 2018-05-21 03:14:08 +0100 |
---|---|---|
committer | Daniele Varrazzo <daniele.varrazzo@gmail.com> | 2018-05-21 03:14:08 +0100 |
commit | 0bb7d0db48d9bca539c7864d14dd813d45bca9a9 (patch) | |
tree | 37080cb598e6fe736e396c447560905bdb2f06e0 /lib/extras.py | |
parent | 7bdaf0affd0a459dafb827b6faea2e1c1409af1d (diff) | |
download | psycopg2-0bb7d0db48d9bca539c7864d14dd813d45bca9a9.tar.gz |
DictCursor and RealDictCursor rows maintain columns order
Close #177.
Diffstat (limited to 'lib/extras.py')
-rw-r--r-- | lib/extras.py | 34 |
1 files changed, 30 insertions, 4 deletions
diff --git a/lib/extras.py b/lib/extras.py index 904c5f0..ff32ab6 100644 --- a/lib/extras.py +++ b/lib/extras.py @@ -29,7 +29,7 @@ import os as _os import sys as _sys import time as _time import re as _re -from collections import namedtuple +from collections import namedtuple, OrderedDict try: import logging as _logging @@ -140,12 +140,12 @@ class DictCursor(DictCursorBase): self._prefetch = 1 def execute(self, query, vars=None): - self.index = {} + self.index = OrderedDict() self._query_executed = 1 return super(DictCursor, self).execute(query, vars) def callproc(self, procname, vars=None): - self.index = {} + self.index = OrderedDict() self._query_executed = 1 return super(DictCursor, self).callproc(procname, vars) @@ -193,7 +193,7 @@ class DictRow(list): return default def copy(self): - return dict(self.items()) + return OrderedDict(self.items()) def __contains__(self, x): return x in self._index @@ -282,6 +282,32 @@ class RealDictRow(dict): self.update(data[0]) self._column_mapping = data[1] + def __iter__(self): + return iter(self._column_mapping) + + def keys(self): + return iter(self._column_mapping) + + def values(self): + return (self[k] for k in self._column_mapping) + + def items(self): + return ((k, self[k]) for k in self._column_mapping) + + if _sys.version_info[0] < 3: + iterkeys = keys + itervalues = values + iteritems = items + + def keys(self): + return list(self.iterkeys()) + + def values(self): + return list(self.itervalues()) + + def items(self): + return list(self.iteritems()) + class NamedTupleConnection(_connection): """A connection that uses `NamedTupleCursor` automatically.""" |