diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2007-01-23 18:45:11 +0000 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2007-01-23 18:45:11 +0000 |
| commit | 73f1c6044552a652f6ae87ab0b93e28b1e54f4a6 (patch) | |
| tree | c4fed9041bc6274b887496c4940eaf8c7f6a6579 /lib/sqlalchemy/engine | |
| parent | a06cf30cfe1b2a771800429430818ab35dbf37f6 (diff) | |
| download | sqlalchemy-73f1c6044552a652f6ae87ab0b93e28b1e54f4a6.tar.gz | |
- added support for column "key" attribute to be useable in row[<key>]/row.<key>
Diffstat (limited to 'lib/sqlalchemy/engine')
| -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 |
