1

当我执行以下代码时:

for acc_row in cursor.execute("select * from tabela1"):
    cursor.execute("UPDATE table_name SET column_name=? where column_name=?", ('some_value','some_value'))

我收到以下错误,引用包含 for 循环的行:

ProgrammingError: No results. Previous SQL was not a query

for 循环在没有更新语句的情况下工作正常,反之亦然

软件:

用于 MS Access 2010 的Python 2.7
Windows
pyodbc 3.0.7 AccessDatabaseEngine

4

2 回答 2

2

您依靠cursor.对象的状态来控制for循环,但随后您在循环内修改该对象(通过执行 UPDATE 语句)。您需要维护两个游标对象,一个用于控制循环,另一个用于执行更新。

于 2013-08-08T17:50:41.550 回答
1

如果您的结果集不大,这应该可以:

rows = cursor.execute('select * from tabela1').fetchall()
for acc_row in rows:
    cursor.execute('UPDATE table_name SET column_name=? where column_name=?', (acc_row.column1, acc_row.column2))

如果结果集太大而无法加载到内存中,请按照 Gord Thompson 的回答中提到的那样维护两个游标。

于 2013-08-08T17:57:51.327 回答