我已经看过类似的问题,但到目前为止,没有任何一个对我有效
就是这样。我想通过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中提交了我的更改,它工作得很好
你有没有办法查一下数据库?我的意思是,为了了解这是否是python程序的问题,我们需要检查数据库中的v$会话,以了解是否有东西被阻塞
其中xxx是与python连接的会话的sid
顺便说一下,我会选择在游标执行后显式提交
希望能有帮助 最好的
相关问题 更多 >
编程相关推荐