用Python mysqldb 程序化设置offset/limit

2 投票
2 回答
3078 浏览
提问于 2025-04-16 08:06

我正在尝试处理数据库表中的数据。如果一次性加载所有数据,会占用大部分计算机资源。以下是我现在的代码:

cursor.execute("SELECT * from sometable")
rs = cursor.fetchall()
.
# process 1: set operation
.
for a in rs:
    # process 2: put data in another db

有没有办法减少资源的使用呢?比如在一个循环中逐行获取数据?

2 个回答

1

使用cursor.fetchone()可能还是会导致资源问题,因为在它之前有一个SELECT *的语句。我认为最好的办法是用LIMIT来限制查询结果,然后逐个处理这些结果。

1

你可以使用 cursor.fetchone() 这个方法。想了解更多,可以在 这里 阅读。下面是一个使用的例子:

cursor.execute(query)
numrows = int(cursor.rowcount)
for x in range(0,numrows):
    row = cursor.fetchone()

你也可以考虑在 MySQL 查询中使用 LIMIT,这样可以限制返回的结果数量:

cursor.execute("SELECT * from sometable LIMIT 0, 100")

最后,尽量避免使用星号(*)来选择所有列,最好只选择你需要的那些列。

撰写回答