【发布时间】:2011-01-23 08:43:31
【问题描述】:
我正在创建一个需要访问数据库的 RESTful API。我正在使用 Restish、Oracle 和 SQLAlchemy。不过,我会尽量概括我的问题,而不考虑 Restish 或其他 Web API。
我希望能够为执行查询的连接设置超时。这是为了确保放弃长时间运行的查询,并丢弃(或回收)连接。这个查询超时可以是一个全局值,也就是说,我不需要在每次查询或连接创建时更改它。
给定以下代码:
import cx_Oracle
import sqlalchemy.pool as pool
conn_pool = pool.manage(cx_Oracle)
conn = conn_pool.connect("username/p4ss@dbname")
conn.ping()
try:
cursor = conn.cursor()
cursor.execute("SELECT * FROM really_slow_query")
print cursor.fetchone()
finally:
cursor.close()
如何修改上面的代码来设置查询超时? 此超时是否也适用于连接创建?
这类似于 java.sql.Statement 的 setQueryTimeout(int seconds) 方法在 Java 中所做的。
谢谢
【问题讨论】:
-
嗨,我看到没有接受任何错误的答案,您是否找到任何其他解决方案?
-
不,我无法完成这项工作。迄今为止建议的解决方案根本行不通。
-
为什么
conn.cancel()不起作用?当您尝试 Dmitry 的解决方案时会发生什么? -
我还没有机会测试 Dmitry 的解决方案。 (从那以后我开始做其他事情。)如果其他人添加了他们已经测试过的评论,我可以接受这个解决方案。
-
Dmitry 的解决方案非常有效!超时后,我收到“ORA-01013:用户请求取消当前操作”。所以我会接受那个anwser
标签: python database oracle cx-oracle python-db-api