SQLAlchemy:session.close()或session.commit()

时间:2016-07-13 05:46:33

标签: python sqlalchemy

我是SQLAlchemy的新手。现在我需要查询一些数据,如下所示

def get_xx():
    sess = Session()
    return sess.query(xx).filter(
        xx.id == 3, xx.status == 1
    ).first()

隔离级别为repeatable read,自动提交已关闭;因此,即使值已更新,我也总会得到相同的结果。

现在问题出现了,sess.close()和sess.commit(),我应该使用哪种方法?

我尝试使用的最终解决方案如下,但我不确定它是否足够好(提交后关闭)?

@contextmanager
def auto_session():
    sess = Session()
    try:
        yield sess
        sess.commit()
    except:  # swallow any exception
        sess.rollback()
    finally:
        sess.close()

源代码已更改

def get_xx():
    with auto_session() as sess:
        return sess.query(xx).filter(
            xx.id == 3, xx.status == 1
        ).first()

2 个答案:

答案 0 :(得分:0)

您的会话提交和关闭绝对是您所做的。在您的源代码中,您可以尝试这个..

from operator import and_
def get_xx():
    with auto_session() as sess:
        return sess.query(xx).filter(and_(
            xx.id == 3, xx.status == 1
        )).first()

答案 1 :(得分:0)

提交后,您可以刷新会话,然后关闭会话。

@contextmanager
def auto_session():
    sess = Session()
    try:
        yield sess
        sess.commit()
        sess.refresh()
    except:  # swallow any exception
        sess.rollback()
    finally:
        sess.close()



from operator import and_
def get_xx():
    with auto_session() as sess:
        return sess.query(xx).filter(and_(
            xx.id == 3, xx.status == 1
        )).first()