summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/engine.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2006-03-13 02:00:21 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2006-03-13 02:00:21 +0000
commit1fc3d226558837b69ea8234f405b8dd6c8710b0a (patch)
tree05fdbf9e9206a124feb84ada0abf3c52db08551f /lib/sqlalchemy/engine.py
parenta579e8f687833257757d53e772698f652e90472a (diff)
downloadsqlalchemy-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.py44
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):