diff options
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): |