在Python中设置数据库连接超时

one*_*elf 11 python database oracle cx-oracle python-db-api

我正在创建一个需要访问数据库的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()
Run Code Online (Sandbox Code Playgroud)

如何修改上面的代码来设置查询超时?此超时是否也适用于连接创建?

这类似于java.sql.Statement的setQueryTimeout(int seconds)方法在Java中的作用.

谢谢

小智 14

对于查询,您可以查看计时器和conn.cancel()调用.

这些方面的东西:

t = threading.Timer(timeout,conn.cancel)
t.start()
cursor = conn.cursor()
cursor.execute(query)
res =  cursor.fetchall()
t.cancel()
Run Code Online (Sandbox Code Playgroud)


小智 5

在linux中查看/etc/oracle/sqlnet.ora,

sqlnet.outbound_connect_timeout= value

还有选项:

tcp.connect_timeout 和 sqlnet.expire_time,祝你好运!


Gar*_*ers 0

您可以查看在 Oracle 中设置PROFILE,以在一定数量的 Logical_reads_per_call 和/或 cpu_per_call 后终止查询