如何在使用cherrypy时回滚postgresql连接

时间:2017-06-05 13:38:59

标签: postgresql psycopg2 cherrypy rollback

我使用cherrypy运行api并使用thread_data将postgresql游标附加到每个线程。

def connect_pg(thread_index):
    cherrypy.thread_data.pgdb = connect(**cherrypy.config['pgargs'])    
    dict_cur = cherrypy.thread_data.pgdb.cursor(cursor_factory=psycopg2.extras.DictCursor)
    dict_cur.close()

然后我使用

创建一个游标

cherrypy.thread_data.pgdb.cursor(cursor_factory=psycopg2.extras.DictCursor)

有时可能会发出错误请求,从而导致出现错误消息

  

InternalError:当前事务被中止,命令被忽略,直到事务块结束

此标准解决方案是进行回滚(http://initd.org/psycopg/docs/faq.html)。

但是,回滚是一种连接方法,而不是游标方法。

使用cherrpy的thread_data时,有哪些好方法可以解决这个错误?

1 个答案:

答案 0 :(得分:0)

我在cherrypy中使用了autocommit,并且很好地完成了工作(How do I properly use psycopg2 with cherrypy?)。我现在按如下方式创建游标:

def connect_pg(thread_index):
   cherrypy.thread_data.pgdb = connect(**cherrypy.config['pgargs'])   
   cherrypy.thread_data.pgdb.autocommit=True
   dict_cur = cherrypy.thread_data.pgdb.cursor(cursor_factory=psycopg2.extras.DictCursor)
   dict_cur.close()