【问题标题】:Updating Oracle DB via pyodbc hangs通过 pyodbc 更新 Oracle DB 挂起
【发布时间】:2019-08-23 05:00:29
【问题描述】:

我遇到了与 Oracle DB 一起使用的 pyodbc 问题。我可以执行返回结果的选择语句,但是当我尝试更新记录时,程序似乎在“conn.execute(query)”行期间挂起,没有错误消息。我必须强制退出应用程序。

运行 select 语句可检索预期结果。更新相同的记录将挂起。 我还在其他应用程序上使用了这个定义,在 MSSQL DB 上没有问题,选择和更新工作正常。我还检查了用户/通行证确实具有读写权限

import pyodbc

def connect_odbc(conn_str, query, commit=False):
    """
    Returns result set from connection string.
    If commit is set to true, it will write to DB as well
    """
    if commit:
        conn = pyodbc.connect(conn_str)
        cursor = conn.cursor()
        cursor.execute(query)  ### <--- Program hangs here
        cursor.commit()
        cursor.close()
        return True
    else:
        conn = pyodbc.connect(conn_str)
        cursor = conn.cursor()
        cursor.execute(query)
        results = cursor.fetchall()
        cursor.close()

        return results

## Main Program ##
query = "select * from multishipdtl where cartonid = '100000000060506';"
queryupdate = "update multishipdtl set trackid='88888888' where cartonid = '100000000060506';"

conn_str = '''DSN=syntest;UID=userid;PWD=userpass'''
results = connect_odbc(conn_str, query)  ### This connects ok with expected results

connect_odbc(conn_str, queryupdate, commit=True)  ### Update statement hangs

【问题讨论】:

    标签: python oracle pyodbc


    【解决方案1】:

    如果程序在执行cursor.execute("UPDATE ...")时挂起,我首先要检查的是它是否在等待数据库响应:How do you show SQL executing on an Oracle database?

    ODBC trace log 也可能会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-01
      • 2013-05-02
      • 2021-07-15
      • 1970-01-01
      • 1970-01-01
      • 2010-11-17
      • 1970-01-01
      • 2020-04-08
      相关资源
      最近更新 更多