summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/engine.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sqlalchemy/engine.py')
-rw-r--r--lib/sqlalchemy/engine.py49
1 files changed, 30 insertions, 19 deletions
diff --git a/lib/sqlalchemy/engine.py b/lib/sqlalchemy/engine.py
index 93569a05c..c910916d1 100644
--- a/lib/sqlalchemy/engine.py
+++ b/lib/sqlalchemy/engine.py
@@ -124,7 +124,7 @@ class SQLEngine(schema.SchemaEngine):
connection.commit()
def proxy(self):
- return lambda s, p = None: self.execute(s, p, commit=True)
+ return lambda s, p = None: self.execute(s, p)
def connection(self):
return self._pool.connect()
@@ -172,8 +172,6 @@ class SQLEngine(schema.SchemaEngine):
self.do_rollback(self.context.transaction)
self.context.transaction = None
self.context.tcount = None
- else:
- self.do_rollback(self.connection())
def commit(self):
if self.context.transaction is not None:
@@ -183,8 +181,6 @@ class SQLEngine(schema.SchemaEngine):
self.do_commit(self.context.transaction)
self.context.transaction = None
self.context.tcount = None
- else:
- self.do_commit(self.connection())
def pre_exec(self, connection, cursor, statement, parameters, many = False, echo = None, **kwargs):
pass
@@ -202,19 +198,23 @@ class SQLEngine(schema.SchemaEngine):
else:
c = connection.cursor()
- self.pre_exec(connection, c, statement, parameters, echo = echo, **kwargs)
-
- if echo is True or self.echo:
- self.log(statement)
- self.log(repr(parameters))
-
- if isinstance(parameters, list):
- self._executemany(c, statement, parameters)
- else:
- self._execute(c, statement, parameters)
- self.post_exec(connection, c, statement, parameters, echo = echo, **kwargs)
- if commit:
- connection.commit()
+ try:
+ self.pre_exec(connection, c, statement, parameters, echo = echo, **kwargs)
+
+ if echo is True or self.echo:
+ self.log(statement)
+ self.log(repr(parameters))
+ if isinstance(parameters, list):
+ self._executemany(c, statement, parameters)
+ else:
+ self._execute(c, statement, parameters)
+ self.post_exec(connection, c, statement, parameters, echo = echo, **kwargs)
+ if commit or self.context.transaction is None:
+ self.do_commit(connection)
+ except:
+ self.do_rollback(connection)
+ # TODO: wrap DB exceptions ?
+ raise
return ResultProxy(c, self, typemap = typemap)
def _execute(self, c, statement, parameters):
@@ -247,7 +247,18 @@ class ResultProxy:
i+=1
def _get_col(self, row, key):
- rec = self.props[key.lower()]
+ if isinstance(key, schema.Column):
+ try:
+ rec = self.props[key.label.lower()]
+ except KeyError:
+ try:
+ rec = self.props[key.key.lower()]
+ except KeyError:
+ rec = self.props[key.name.lower()]
+ elif isinstance(key, str):
+ rec = self.props[key.lower()]
+ else:
+ rec = self.props[key]
return rec[0].convert_result_value(row[rec[1]])
def fetchall(self):