检查上下文管理器的状态

时间:2016-06-02 13:40:51

标签: sqlalchemy

我试图在管理SQLAlchemy核心连接时减少样板。现在我有这个上下文管理器:

@contextmanager 
def conn_manager(conn):
    """Manages transactions and automatically commits, rollbacks and logs"""

    log.info("begin")
    trans = conn.begin()
    try:
        yield conn
        trans.commit()
    except Exception as err:
        log.exception("%s: %s", err.__class__.__name__, err)
        trans.rollback()

(这只是一个概念验证的存根。我不会在最终版本中捕获异常)

以下是使用它的代码示例:

conn = engine.connect()
clean_session = False
with conn_manager(conn) as conn:
    result = conn.execute("select * from users")
    for row in result:
        print row
    clean_session = True

if clean_session:
    print "Good"
else:
    print "Bad"

这个上下文管理器用于执行数据库CRUD,因此不会总是存在超出上下文管理器范围的值,因此我被迫使用clean_session变量。有更优雅的方式吗?

0 个答案:

没有答案