2017-06-05 70 views
0

時,如何回滾一個PostgreSQL連接我使用CherryPy的運行的API,並使用thread_data到PostgreSQL的光標附加到每個線程。使用CherryPy的

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: current transaction is aborted, commands ignored until end of transaction block

對此的標準解決方案是做回滾(http://initd.org/psycopg/docs/faq.html)。

然而,回退是一種連接方法,而不是一個光標方法。

有什麼好的方法來處理這個錯誤使用cherrpy的thread_data什麼時候?

+0

我想你想爲此創建一個CherryPy工具。您可能還想使用SQLAlchemy ORM。下面是SQLAlchemy的CherryPy的工具的例子:https://github.com/open-craft-guild/blueberrypy/blob/75ccae2/src/blueberrypy/tools.py#L102-L155 – webKnjaZ

回答

0

我用自動提交CherryPy的範圍內,並且做了很好的工作(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()