For reasons of pure asthetics and my own learning I wanted it to look like this:
</B> def resultsetbatchgen(cursor, size=100): for results in (recordbatch for recordbatch in cursor.fetchmany(size)): for rec in results: yield rec </B>
Note that this is equivalent to:
def resultsetbatchgen(cursor, size=100): for results in cursor.fetchmany(size): for rec in results: yield rec
That is, your generator expression isn't really doing anything.
1000cur.execute(<QUERY WITH MOER THAN 1000 records>) recs = (recordbatch for recordbatch in cur.fetchmany(1000)) sum(map(lambda x: 1, (rec for rec in recs)))
This should be equivalent to ... >>> recs = iter(cur.fetchmany(1000)) >>> len(list(recs))
... print sum(map(lambda x: 1, (rec for rec in results)))cur.execute(<QUERY WITH MOER THAN 1000 records>) for results in (recordbatch for recordbatch in cur.fetchmany(1000)):
This is now equivalent to: >>> cur.execute(<QUERY WITH MOER THAN 1000 records>) >>> for rec in cur.fetchmany(1000): ... print len(list(results))
Note that you're counting the number of elements in record, which I'm guessing is 76?
I'm thinking you want to do something like:
def resultsetbatchgen(cursor, size=100): while True: results = cursor.fetchmany(size) if not results: break for rec in results: yield rec
I don't actually know how you tell when there isn't anything more to fetch, but if it returns an empty list, you could also write this like:
def resultsetbatchgen(cursor, size=100): for results in iter(lambda: cursor.fetchmany(size), []) for rec in results: yield rec
HTH,
STeVe -- http://mail.python.org/mailman/listinfo/python-list