diff options
Diffstat (limited to 'lib/sqlalchemy/engine/base.py')
| -rw-r--r-- | lib/sqlalchemy/engine/base.py | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/lib/sqlalchemy/engine/base.py b/lib/sqlalchemy/engine/base.py index 65f2b5586..77ab866c7 100644 --- a/lib/sqlalchemy/engine/base.py +++ b/lib/sqlalchemy/engine/base.py @@ -297,7 +297,7 @@ class Connection(Connectable): context.pre_exec(self.__engine, proxy, compiled, parameters) proxy(str(compiled), parameters) context.post_exec(self.__engine, proxy, compiled, parameters) - return ResultProxy(self.__engine, self, cursor, context, typemap=compiled.typemap) + return ResultProxy(self.__engine, self, cursor, context, typemap=compiled.typemap, columns=compiled.columns) # poor man's multimethod/generic function thingy executors = { @@ -545,13 +545,14 @@ class ResultProxy(object): def convert_result_value(self, arg, engine): raise exceptions.InvalidRequestError("Ambiguous column name '%s' in result set! try 'use_labels' option on select statement." % (self.key)) - def __init__(self, engine, connection, cursor, executioncontext=None, typemap=None): + def __init__(self, engine, connection, cursor, executioncontext=None, typemap=None, columns=None): """ResultProxy objects are constructed via the execute() method on SQLEngine.""" self.connection = connection self.dialect = engine.dialect self.cursor = cursor self.engine = engine self.closed = False + self.columns = columns if executioncontext is not None: self.__executioncontext = executioncontext self.rowcount = executioncontext.get_rowcount(cursor) @@ -611,15 +612,26 @@ class ResultProxy(object): try: rec = self.props[key.key.lower()] except KeyError: -# rec = self.props[key.name.lower()] try: rec = self.props[key.name.lower()] except KeyError: raise exceptions.NoSuchColumnError("Could not locate column in row for column '%s'" % str(key)) elif isinstance(key, str): - rec = self.props[key.lower()] + try: + rec = self.props[key.lower()] + except KeyError: + try: + if self.columns is not None: + rec = self._convert_key(self.columns[key]) + else: + raise + except KeyError: + raise exceptions.NoSuchColumnError("Could not locate column in row for column '%s'" % str(key)) else: - rec = self.props[key] + try: + rec = self.props[key] + except KeyError: + raise exceptions.NoSuchColumnError("Could not locate column in row for column '%s'" % str(key)) self.__key_cache[key] = rec return rec |
