我也研究过类似的问题,但到目前为止,没有什么对我有效
就是这样。我想通过python脚本更新我的表。我使用的是cx\u oracle模块。我可以执行select查询,但是每当我尝试执行update查询时,我的程序就会挂起(冻结)。我意识到,如果我正在更新一个表,但我的代码永远不会超过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中提交了我的更改,而且效果很好!
1条答案
按热度按时间knpiaxh11#
你有办法查数据库吗?我的意思是,为了了解这是否是python程序的问题,我们需要检查数据库中的v$会话,以了解是否有东西被阻塞了。
其中是与python连接的会话的sid。
顺便说一下,我会选择在游标执行之后显式提交
希望它能帮上大忙