diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2014-08-28 20:06:12 -0400 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2014-08-28 20:06:49 -0400 |
| commit | c192e447f3a5e8bfaaa46097eb4d6179f056361c (patch) | |
| tree | 4c834538728c9fa22f1c9c1cd065d2e2bb44f930 /lib/sqlalchemy/engine | |
| parent | fa5522547150687c9b3cd41d28df08ab0512b5b2 (diff) | |
| download | sqlalchemy-c192e447f3a5e8bfaaa46097eb4d6179f056361c.tar.gz | |
- major refactoring/inlining to loader.instances(), though not really
any speed improvements :(. code is in a much better place to be run into
C, however
- The ``proc()`` callable passed to the ``create_row_processor()``
method of custom :class:`.Bundle` classes now accepts only a single
"row" argument.
- Deprecated event hooks removed: ``populate_instance``,
``create_instance``, ``translate_row``, ``append_result``
- the getter() idea is somewhat restored; see ref #3175
Diffstat (limited to 'lib/sqlalchemy/engine')
| -rw-r--r-- | lib/sqlalchemy/engine/result.py | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/lib/sqlalchemy/engine/result.py b/lib/sqlalchemy/engine/result.py index 06a81aa6c..3995942ef 100644 --- a/lib/sqlalchemy/engine/result.py +++ b/lib/sqlalchemy/engine/result.py @@ -110,7 +110,7 @@ class RowProxy(BaseRowProxy): __slots__ = () def __contains__(self, key): - return self._parent._has_key(self._row, key) + return self._parent._has_key(key) def __getstate__(self): return { @@ -155,7 +155,7 @@ class RowProxy(BaseRowProxy): def has_key(self, key): """Return True if this RowProxy contains the given key.""" - return self._parent._has_key(self._row, key) + return self._parent._has_key(key) def items(self): """Return a list of tuples, each tuple containing a key/value pair.""" @@ -331,12 +331,28 @@ class ResultMetaData(object): map[key] = result return result - def _has_key(self, row, key): + def _has_key(self, key): if key in self._keymap: return True else: return self._key_fallback(key, False) is not None + def _getter(self, key): + if key in self._keymap: + processor, obj, index = self._keymap[key] + else: + ret = self._key_fallback(key, False) + if ret is None: + return None + processor, obj, index = ret + + if index is None: + raise exc.InvalidRequestError( + "Ambiguous column name '%s' in result set! " + "try 'use_labels' option on select statement." % key) + + return operator.itemgetter(index) + def __getstate__(self): return { '_pickled_keymap': dict( @@ -398,6 +414,12 @@ class ResultProxy(object): context.engine._should_log_debug() self._init_metadata() + def _getter(self, key): + return self._metadata._getter(key) + + def _has_key(self, key): + return self._metadata._has_key(key) + def _init_metadata(self): metadata = self._cursor_description() if metadata is not None: |
