# py2 / py3 compat
try:
# xrange is defined in py2 only
xrange
except NameError:
# py3 range is actually p2 xrange
xrange = range
cursor.execute("SELECT count(*) FROM mytable")
count = cursor.fetchone()[0]
batch_size = 42 # whatever
for offset in xrange(0, count, batch_size):
cursor.execute(
"SELECT * FROM mytable LIMIT %s OFFSET %s",
(batch_size, offset))
for row in cursor:
do_something_with(row)
你可以用
其中X是所需批的大小,Y是当前偏移量(例如X乘以当前迭代次数)
第一点:python
db-api.cursor
是一个迭代器,因此除非您真的需要一次将整个批加载到内存中,否则您可以从使用此功能开始,即不要:你可以:
如果您的db connector的实现仍然不能正确地使用这个特性,那么现在就应该为这个组合添加LIMIT和OFFSET:
要扩展akalikin的答案,可以使用分步迭代将查询分割成块,然后使用LIMIT和OFFSET执行查询。
相关问题 更多 >
编程相关推荐