diff --git a/torndb.py b/torndb.py index 33b3f7b..e977b8b 100644 --- a/torndb.py +++ b/torndb.py @@ -134,6 +134,22 @@ def query(self, query, *parameters, **kwparameters): return [Row(itertools.izip(column_names, row)) for row in cursor] finally: cursor.close() + + def transaction(self, query, *parameters, **kwparameters): + self._db.begin() + cursor = self._cursor() + status = True + try: + for sql in query: + cursor.execute(sql, kwparameters or parameters) + self._db.commit() + except OperationalError, e: + self._db.rollback() + status = False + #raise Exception(e.args[0], e.args[1]) + finally: + cursor.close() + return status def get(self, query, *parameters, **kwparameters): """Returns the first row returned for the given query.""" @@ -215,6 +231,10 @@ def _ensure_connected(self): if (self._db is None or (time.time() - self._last_use_time > self.max_idle_time)): self.reconnect() + try: + self._db.ping() + except: + self.reconnect() self._last_use_time = time.time() def _cursor(self):