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
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)
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):
self.statement = statement
self.params = params
self.orig = orig
+ def __str__(self):
+ return SQLAlchemyError.__str__(self) + " " + repr(self.statement) + " " + repr(self.params)
class ArgumentError(SQLAlchemyError):
"""raised for all those conditions where invalid arguments are sent to constructed
class DBAPIError(SQLAlchemyError):
"""something weird happened with a particular DBAPI version"""
- pass
\ No newline at end of file
+ pass
class UnicodeTest(AssertMixin):
def setUpAll(self):
global uni_table
- uni_table = Table('test', db,
+ uni_table = Table('uni_test', db,
Column('id', Integer, primary_key=True),
Column('txt', Unicode(50))).create()
def setUpAll(self):
global unicode_table
unicode_table = Table('unicode_table', db,
- Column('id', Integer, primary_key=True),
+ Column('id', Integer, Sequence('uni_id_seq', optional=True), primary_key=True),
Column('unicode_data', Unicode(250)),
Column('plain_data', String(250))
)