我对 SQLAlchemy 相当陌生,我想知道用会话编写代码并将 sqlalchemy 查询拆分为几个函数并在出现任何异常时避免僵尸会话(为了避免溢出池并使服务器不负责任)的正确风格是什么所以,我的问题可以在一个函数中创建会话并作为参数传递到另一个函数中,在内部调用flush,在外部提交中使用finnaly,这是安全的方法还是有更好的方法?例如
class Fetcher(object):
def main(self, name):
try:
session = Session()
user = session.query(UserModel).filter(UserModel.name.like(name)).first()
if user and user.active:
relatives = _fetch_relatives(session, user.id)
user.active = utc_time()
session.commit()
except Exception as e:
print e
session.rollback()
finally:
session.close()
def _fetch_relatives(self, session, id):
relatives = []
try:
for r in session.query(RelativesModel).filter(RelativesModel.relative_id == id).all():
relatives.apped({'name': r.name, 'age': r.age})
r.readed = utc_time()
session.flush()
except Exception as e:
print e
session.rollback()
finally:
session.close()
return relatives