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