我是 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)
您的会话提交和关闭是绝对正确的。在你的源代码中你可以尝试这个..
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)
| 归档时间: |
|
| 查看次数: |
5633 次 |
| 最近记录: |