Python:cx_Oracle cursor.execute()挂起更新查询

2024-10-02 02:40:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经看过类似的问题,但到目前为止,没有任何一个对我有效

就是这样。我想通过python脚本更新我的表。我正在使用cx_oracle模块。我可以执行SELECT查询,但每当我尝试执行更新查询时,我的程序就会挂起(冻结)。我意识到,如果我正在更新一个表,但我的代码从未经过cursor.commit(),那么我需要在cursor.execute()之后使用cursor.commit()。我在下面添加了一个用于调试的代码段

有什么建议吗

代码

import cx_Oracle

def getConnection():
    ip = '127.0.0.1'
    port = 1521
    service_name = 'ORCLCDB.localdomain'
    username = 'username'
    password = 'password'
    dsn = cx_Oracle.makedsn(ip, port, service_name=service_name)  # (CONNECT_DATA=(SERVICE_NAME=ORCLCDB.localdomain)))
    return cx_Oracle.connect(username, password, dsn) # connection

def debugging():
    con = getConnection()
    print(con)
    cur = con.cursor()
    print('Updating')
    cur.execute('UPDATE EMPLOYEE SET LATITUDE = 53.540943 WHERE EMPLOYEEID = 1')
    print('committing')
    con.commit()
    con.close()
    print('done')

debugging()

**以下是相应的输出:**

<cx_Oracle.Connection to username@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCLCDB.localdomain)))>
Updating

解决方案

经过一番探索,我找到了根本原因!我使用OracleSQLDeveloper对表进行了更改,但没有提交这些更改,当python脚本试图对表进行更改时,它会因此而冻结。为了避免冻结,在运行python脚本之前,我在OracleSQLDeveloper中提交了我的更改,它工作得很好


Tags: 代码name脚本executeserviceusernamepasswordcon
1条回答
网友
1楼 · 发布于 2024-10-02 02:40:51

你有没有办法查一下数据库?我的意思是,为了了解这是否是python程序的问题,我们需要检查数据库中的v$会话,以了解是否有东西被阻塞

select sid, event, last_call_et, status from v$session where sid = xxx 

其中xxx是与python连接的会话的sid

顺便说一下,我会选择在游标执行后显式提交

cur.execute('UPDATE EMPLOYEE SET LATITUDE = 53.540943 WHERE EMPLOYEEID = 1')
con.commit()

希望能有帮助 最好的

相关问题 更多 >

    热门问题