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

Jac*_*cky 6 python sqlalchemy

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

def get_xx():
    sess = Session()
    return sess.query(xx).filter(
        xx.id == 3, xx.status == 1
    ).first()
Run Code Online (Sandbox Code Playgroud)

隔离级别是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()
Run Code Online (Sandbox Code Playgroud)

并且源代码改变了

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

Sum*_*yan 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()
Run Code Online (Sandbox Code Playgroud)