【发布时间】:2021-03-31 07:49:09
【问题描述】:
我正在执行可能导致数千行的数据库查询。
最简单的方法是遍历fetchall():
import pymysql
sql_command = "SELECT * FROM table WHERE some_condition;"
connection = pymysql.connect(...)
cursor = connection.cursor()
nof_affected_rows = cursor.execute(sql_command)
for row in cursor.fetchall():
# process row
但是,我担心这里的内存耗尽。因此,另一种天真的方法是迭代 fetchone,一次一个元素。
import pymysql
sql_command = "SELECT * FROM table WHERE some_condition;"
connection = pymysql.connect(...)
cursor = connection.cursor()
nof_affected_rows = cursor.execute(sql_command)
while True:
row = cursor.fetchone()
if not row:
break
# process row
现在一位同事认为我应该使用fetchmany(),因为它会一次检索多个元素,从而避免往返。同时我会控制内存消耗。
这是真的吗? fetchone() 是否缓冲。如果是缓冲的,扩展到哪个范围?
【问题讨论】:
标签: pymysql