summaryrefslogtreecommitdiff
path: root/python/skytools/psycopgwrapper.py
diff options
context:
space:
mode:
authorMarko Kreen2008-03-11 16:25:15 +0000
committerMarko Kreen2008-03-11 16:25:15 +0000
commit906c5e614fe4c669f73b712487201c5b0a53beec (patch)
tree41d395244f9bf9941cb65559f83e0d6f2187239b /python/skytools/psycopgwrapper.py
parent75310798a4a66db7ec60adafad4413af89502c11 (diff)
very experimental row.col access, add __slots__
Diffstat (limited to 'python/skytools/psycopgwrapper.py')
-rw-r--r--python/skytools/psycopgwrapper.py18
1 files changed, 17 insertions, 1 deletions
diff --git a/python/skytools/psycopgwrapper.py b/python/skytools/psycopgwrapper.py
index 6c8bd421..ef4fe94e 100644
--- a/python/skytools/psycopgwrapper.py
+++ b/python/skytools/psycopgwrapper.py
@@ -21,9 +21,11 @@ try:
import psycopg2.extensions, psycopg2.extras
from psycopg2.extensions import QuotedString
+ from sqltools import dbdict
class _CompatRow(psycopg2.extras.DictRow):
"""Make DictRow more dict-like."""
+ __slots__ = ('_index',)
def __setitem__(self, k, v):
"""Allow adding new key-value pairs.
@@ -47,7 +49,7 @@ try:
def copy(self):
"""Return regular dict."""
- return dict(self.items())
+ return dbdict(self.iteritems())
def iterkeys(self):
return self._index.iterkeys()
@@ -55,6 +57,20 @@ try:
def itervalues(self):
return list.__iter__(self)
+ # obj.foo access
+ def __getattr__(self, k):
+ try:
+ return psycopg2.extras.DictRow.__getattr__(self, k)
+ except AttributeError:
+ return self[k]
+ def __setattr__(self, k, v):
+ if k == "_index":
+ return psycopg2.extras.DictRow.__setattr__(self, k, v)
+ else:
+ self[k] = v
+ def __delattr__(self, k):
+ raise Exception("del not supported for DictRow")
+
class _CompatCursor(psycopg2.extras.DictCursor):
"""Regular psycopg2 DictCursor with dict* methods."""
def __init__(self, *args, **kwargs):