一尘不染

Python DB-API:fetchone与fetchmany与fetchall

mysql

我今天刚刚与一些同事讨论了python的db-api fetchone vs fetchmany vs fetchall。

我确定每个应用程序的用例都取决于我正在使用的db-api的实现,但是总的来说,fetchone,fetchmany,fetchall的用例是什么?

换句话说,以下等效项是什么?还是其中之一比其他人更受青睐?如果是这样,在哪些情况下?

cursor.execute("SELECT id, name FROM `table`")
for i in xrange(cursor.rowcount):
    id, name = cursor.fetchone()
    print id, name


cursor.execute("SELECT id, name FROM `table`")
result = cursor.fetchmany()
while result:
    for id, name in result:
        print id, name
    result = cursor.fetchmany()


cursor.execute("SELECT id, name FROM `table`")
for id, name in cursor.fetchall():
    print id, name

阅读 270

收藏
2020-05-17

共1个答案

一尘不染

我认为这确实取决于实现,但是您可以通过查看MySQLdb源代码来了解差异。根据选项的不同,mysqldb fetch
*将当前行集保留在内存或服务器端,因此fetchmany vs
fetchone在此处具有一定的灵活性,可以知道要在(python)的内存中保留什么以及在数据库服务器端保留什么。

PEP 249并没有提供太多细节,所以我想这是根据数据库来实现的,而确切的语义是由实现定义的。

2020-05-17