From 3282c22786efa8c296fdfaa8d71d1de9ae301c00 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Sat, 25 Mar 2006 02:49:10 +0000 Subject: [PATCH] ResultProxy has an iterator interface --- lib/sqlalchemy/engine.py | 8 ++++++++ test/query.py | 11 +++++++++++ 2 files changed, 19 insertions(+) diff --git a/lib/sqlalchemy/engine.py b/lib/sqlalchemy/engine.py index 5c14e7a3cd..dcb14af861 100644 --- a/lib/sqlalchemy/engine.py +++ b/lib/sqlalchemy/engine.py @@ -807,6 +807,14 @@ class ResultProxy: else: rec = self.props[key] return rec[0].convert_result_value(row[rec[1]], self.engine) + + def __iter__(self): + while True: + row = self.fetchone() + if row is None: + raise StopIteration + else: + yield row def fetchall(self): """fetches all rows, just like DBAPI cursor.fetchall().""" diff --git a/test/query.py b/test/query.py index bbed574412..946180618f 100644 --- a/test/query.py +++ b/test/query.py @@ -4,6 +4,7 @@ import unittest, sys, datetime import sqlalchemy.databases.sqlite as sqllite +import tables db = testbase.db #db.echo='debug' from sqlalchemy import * @@ -41,6 +42,16 @@ class QueryTest(PersistTest): self.users.update(self.users.c.user_id == 7).execute(user_name = 'fred') print repr(self.users.select().execute().fetchall()) + def testrowiteration(self): + self.users.insert().execute(user_id = 7, user_name = 'jack') + self.users.insert().execute(user_id = 8, user_name = 'ed') + self.users.insert().execute(user_id = 9, user_name = 'fred') + r = self.users.select().execute() + l = [] + for row in r: + l.append(row) + self.assert_(len(l) == 3) + def testpassiveoverride(self): """primarily for postgres, tests that when we get a primary key column back from reflecting a table which has a default value on it, we pre-execute -- 2.47.2