]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
ResultProxy has an iterator interface
authorMike Bayer <mike_mp@zzzcomputing.com>
Sat, 25 Mar 2006 02:49:10 +0000 (02:49 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sat, 25 Mar 2006 02:49:10 +0000 (02:49 +0000)
lib/sqlalchemy/engine.py
test/query.py

index 5c14e7a3cd1af27280183a9e81c60777fb65f377..dcb14af8612c6a3e41f075f47b917b0c56773073 100644 (file)
@@ -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()."""
index bbed574412917baf1b018e179b836b37ed88c834..946180618f9c7437bb0d825e27b4cdaaa2a1c664 100644 (file)
@@ -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