Ошибка ProgrammingError возникает, если предыдущий вызов execute * () не дал никакого набора результатов, или еще не было выполнено никакого вызова.

я только что была дискуссия с некоторыми коллегами по поводу db-api fetchone Python против fetchmany против 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

Ответы на вопрос(2)

Ваш ответ на вопрос