2017-06-05 13 views
0

cherrypyを使用してapiを実行し、thread_dataを使用して各スレッドにpostgresqlカーソルを添付します。cherrypyを使用するときに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() 

それから悪い要求は、このための標準的な解決策はであるエラーメッセージ

InternalError: current transaction is aborted, commands ignored until end of transaction block

、その結果、作製され得る時々

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

を使用してカーソルを作成しますロールバックする(http://initd.org/psycopg/docs/faq.html)。

ただし、ロールバックは接続方法であり、カーソルメソッドではありません。

cherrpyのthread_dataを使用しているときにこのエラーを処理するには、どのような良い方法がありますか?

+0

私はこのためにCherryPyツールを作成したいと思います。 SQLAlchemy ORMを使用することもできます。 SQLAlchemy Cherrypy Toolの例を次に示します。https://github.com/open-craft-guild/blueberrypy/blob/75ccae2/src/blueberrypy/tools.py#L102-L155 – webKnjaZ

答えて

0

私はチェリーピー内で自動コミットを使用しており、それはうまく仕事をしています(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() 
関連する問題