diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2006-03-13 02:00:21 +0000 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2006-03-13 02:00:21 +0000 |
commit | 1fc3d226558837b69ea8234f405b8dd6c8710b0a (patch) | |
tree | 05fdbf9e9206a124feb84ada0abf3c52db08551f /lib/sqlalchemy/engine.py | |
parent | a579e8f687833257757d53e772698f652e90472a (diff) | |
download | sqlalchemy-1fc3d226558837b69ea8234f405b8dd6c8710b0a.tar.gz |
oracle is requiring dictionary params to be in a clean dict, added conversion
some fixes to unit tests
Diffstat (limited to 'lib/sqlalchemy/engine.py')
-rw-r--r-- | lib/sqlalchemy/engine.py | 44 |
1 files changed, 24 insertions, 20 deletions
diff --git a/lib/sqlalchemy/engine.py b/lib/sqlalchemy/engine.py index e44e0a950..8a29b847f 100644 --- a/lib/sqlalchemy/engine.py +++ b/lib/sqlalchemy/engine.py @@ -586,14 +586,7 @@ class SQLEngine(schema.SchemaEngine): if statement is None: return cursor - executemany = parameters is not None and isinstance(parameters, list) - - if self.positional: - if executemany: - parameters = [p.values() for p in parameters] - else: - parameters = parameters.values() - + parameters = self._convert_compiled_params(parameters) self.execute(statement, parameters, connection=connection, cursor=cursor, return_raw=True) return cursor @@ -657,12 +650,12 @@ class SQLEngine(schema.SchemaEngine): return ResultProxy(cursor, self, typemap=typemap) def _execute(self, c, statement, parameters): + if parameters is None: + if self.positional: + parameters = () + else: + parameters = {} try: - if parameters is None: - if self.positional: - parameters = () - else: - parameters = {} c.execute(statement, parameters) except Exception, e: raise exceptions.SQLError(statement, parameters, e) @@ -671,15 +664,26 @@ class SQLEngine(schema.SchemaEngine): c.executemany(statement, parameters) self.context.rowcount = c.rowcount - def proxy(self, statement=None, parameters=None): + def _convert_compiled_params(self, parameters): executemany = parameters is not None and isinstance(parameters, list) + # the bind params are a CompiledParams object. but all the DBAPI's hate + # that object (or similar). so convert it to a clean + # dictionary/list/tuple of dictionary/tuple of list + if parameters is not None: + if self.positional: + if executemany: + parameters = [p.values() for p in parameters] + else: + parameters = parameters.values() + else: + if executemany: + parameters = [p.get_raw_dict() for p in parameters] + else: + parameters = parameters.get_raw_dict() + return parameters - if self.positional: - if executemany: - parameters = [p.values() for p in parameters] - else: - parameters = parameters.values() - + def proxy(self, statement=None, parameters=None): + parameters = self._convert_compiled_params(parameters) return self.execute(statement, parameters) def log(self, msg): |