【问题标题】:Use UPDATE in a loop在循环中使用 UPDATE
【发布时间】:2013-08-08 16:33:22
【问题描述】:

当我执行以下代码时:

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 循环在没有更新语句的情况下可以正常工作,反之亦然

软件:

Python 2.7
窗户
pyodbc 3.0.7
用于 MS Access 2010 的 AccessDatabaseEngine

【问题讨论】:

    标签: sql ms-access python-2.7 pyodbc


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      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 的回答中提到的那样维护两个游标。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-03
        • 1970-01-01
        • 2014-02-26
        • 2012-02-26
        • 2014-05-26
        • 2016-08-17
        相关资源
        最近更新 更多