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



我是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()

您的会话提交和关闭是您所做的绝对正确的。在您的源代码中,您可以尝试此操作。

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()
提交

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

@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()

最新更新