私はSQLAlchemyにかなり慣れていないので、セッションを使用してコードを記述し、sqlalchemyクエリをいくつかの関数に分割し、例外が発生した場合にゾンビセッションを回避するための正しいスタイルは何だろうかと思います(オーバーフロープールを回避し、サーバーを無責任にするため)だから、私の質問ある関数でセッションを作成し、パラメーターとして別の関数に渡し、内部で単にフラッシュを呼び出し、外部コミットで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