From: Mike Bayer Date: Thu, 12 Oct 2006 17:02:12 +0000 (+0000) Subject: - ResultProxy.fetchall() internally uses DBAPI fetchall() for better efficiency, X-Git-Tag: rel_0_3_0~62 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c934ae44a84fd94d805b341bfba68308e82c2384;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - ResultProxy.fetchall() internally uses DBAPI fetchall() for better efficiency, added to mapper iteration as well (courtesy Michael Twomey) --- diff --git a/CHANGES b/CHANGES index eb5f10f3da..721a5ef19c 100644 --- a/CHANGES +++ b/CHANGES @@ -56,6 +56,8 @@ - ResultProxy will close() the underlying cursor when the ResultProxy itself is closed. this will auto-close cursors for ResultProxy objects that have had all their rows fetched (or had scalar() called). + - ResultProxy.fetchall() internally uses DBAPI fetchall() for better efficiency, + added to mapper iteration as well (courtesy Michael Twomey) - SQL Construction: - changed "for_update" parameter to accept False/True/"nowait" and "read", the latter two of which are interpreted only by diff --git a/lib/sqlalchemy/engine/base.py b/lib/sqlalchemy/engine/base.py index 79a1909d1f..4251c58108 100644 --- a/lib/sqlalchemy/engine/base.py +++ b/lib/sqlalchemy/engine/base.py @@ -632,11 +632,10 @@ class ResultProxy: def fetchall(self): """fetch all rows, just like DBAPI cursor.fetchall().""" l = [] - while True: - v = self.fetchone() - if v is None: - return l - l.append(v) + for row in self.cursor.fetchall(): + l.append(RowProxy(self, row)) + self.close() + return l def fetchone(self): """fetch one row, just like DBAPI cursor.fetchone().""" diff --git a/lib/sqlalchemy/orm/mapper.py b/lib/sqlalchemy/orm/mapper.py index 57c29a6308..096e1ca33b 100644 --- a/lib/sqlalchemy/orm/mapper.py +++ b/lib/sqlalchemy/orm/mapper.py @@ -659,10 +659,7 @@ class Mapper(object): for m in mappers: otherresults.append(util.UniqueAppender([])) - while True: - row = cursor.fetchone() - if row is None: - break + for row in cursor.fetchall(): self._instance(context, row, result) i = 0 for m in mappers: