저는 sqlalchemy를 사용하여 많은 데이터베이스 액세스 기능을 가진 Python 응용 프로그램을 보유하고 있습니다. 나는이 함수들 주위에 많은 보편적 인 세션 처리 코드를 갖는 것을 피하려고 노력하고있다.sqlalchemy 함수의 상용구 세션 처리 코드 피하기
나는 다음과 같이 보일 많은 기능을 가지고 : 나는 이러한 기능을 리팩토링하려고
def get_ticket_history(Session, ticket_id):
s = Session()
try:
rows = s.query(TicketHistory)\
.filter(TicketHistory.ticket_fk==ticket_id)\
.order_by(TicketHistory.id.desc()).all()
s.commit()
return rows
except:
s.rollback()
raise
finally:
s.close()
,하지만 확실하지 아직 가장 좋은 방법이있다.
def execute(Session, fn, *args, **kwargs):
s = Session()
try:
ret = fn(s, *args, **kwargs)
s.commit()
return ret
except:
s.rollback()
raise
finally:
s.close()
def get_ticket_history(self, ticket_id):
def sql_fn(s):
return s.query(TicketHistory)\
.filter(TicketHistory.ticket_fk==ticket_id)\
.order_by(TicketHistory.id.desc()).all()
return execute(self.sentinel_session, sql_fn)
이 일을 더 이상 관용적 방법이 있나요 : 내가 현재 가지고있는 가장은 다음과 같다? 아마도 데코레이터를 사용하고 있을까요?
덕분에, 상황에 맞는 관리자를 사용하는 존
'컨텍스트 관리자'는 매우 좋은 방법입니다. –