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