我今天刚刚与一些同事讨论了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
我认为这确实取决于实现,但是您可以通过查看MySQLdb源代码来了解差异。根据选项的不同,mysqldb fetch *将当前行集保留在内存或服务器端,因此fetchmany vs fetchone在此处具有一定的灵活性,可以知道要在(python)的内存中保留什么以及在数据库服务器端保留什么。
PEP 249并没有提供太多细节,所以我想这是根据数据库来实现的,而确切的语义是由实现定义的。