Python错误:在进行异步查询时不能使用execute

2024-06-28 19:51:58 发布

您现在位置:Python中文网/ 问答频道 /正文

如何防止错误“ProgrammingError: execute cannot be used while an asynchronous query is underway”?从文档中可以看出,如果我使用的是像gevent这样的协同程序支持,那么我应该使用psycopg2.extras.wait_select,但是当我使用它时仍然会遇到这个错误。我已经隔离了下面代码片段中的错误。

con = psycopg2.connect(database=DATABASE_NAME, user=DATABASE_USERNAME)

def execute_query(cur, query, params):
    psycopg2.extras.wait_select(con)
    cur.execute(query, params)
    psycopg2.extras.wait_select(con)
    rows = cur.fetchall()
    print rows[0]

cur = con.cursor()
query = "SELECT * FROM mytable"
gevent.joinall([
     gevent.spawn(execute_query, cur, query, None),
     gevent.spawn(execute_query, cur, query, None),
     gevent.spawn(execute_query, cur, query, None),
     gevent.spawn(execute_query, cur, query, None)
])

Tags: noneextrasexecute错误geventparamsquerycon
1条回答
网友
1楼 · 发布于 2024-06-28 19:51:58

您试图在一个连接上同时执行多个事务。psycopg文档说这不是线程安全的,并将导致错误。见Asynchronous support and Support for coroutine libraries下方

一种可能的解决方案是每个协程使用一个数据库连接,每个连接都有一个游标(在本例中为4个不同的连接和游标)。

相关问题 更多 >