在psycopg2中取消查询执行

时间:2010-01-11 13:09:02

标签: python postgresql psycopg2 python-db-api

如何使用pyscopg2(python Postgres驱动程序)取消执行查询语句?

举个例子,假设我有以下代码:

import psycopg2
cnx_string = "something_appropriate"

conn = psycopg2.connect(cnx_string)
cur = conn.cursor()
cur.execute("long_running_query")

然后我想取消从另一个线程执行那个长时间运行的查询 - 我必须在连接/游标对象上调用哪个方法来执行此操作?

3 个答案:

答案 0 :(得分:5)

您可以通过在单独的连接中调用pg_cancel_backend(pid) PostgreSQL函数来取消查询。

您可以通过psycopg2的connection.get_backend_pid()方法(可从2.0.8版获得)知道要取消的后端的PID。

答案 1 :(得分:0)

psycopg2的异步执行支持为removed

如果你可以使用py-postgresql及其transactions(它是py3k),那么内部实现是异步的,支持被中断。

答案 2 :(得分:0)

连接对象具有取消成员。使用这个和线程,您可以使用

sqltimeout = threading.Timer(sql_timeout_seconds, conn.cancel)
sqltimeout.start()

当计时器到期时,取消将发送到连接,服务器将引发异常。 当查询正常结束时,别忘了取消计时器。...

sqltimeout.cancel()