2014-07-10 1 views
1

나는 다음과 같은 코드 테이블 고객에 운영에 조각이 : 외부 'db_obj'을 통과액세스 테이블 개체

with session.begin(subtransactions=True): 
    # do some work on db_obj passed from outside 

는 안전한가요 :

with session.begin(subtransactions=True): 
    db_obj = Customer(...) 

result = io_processing() # may cause greenlet switching 

# I do not want to make it inside the transaction above, 
# Because some legacy I/O related code which will causes greenlet switching 
if result: 
    self.read_write_db(session, db_obj) 

read_write_db 기능에서을 다른 함수로 트랜잭션?

또는 db_obj를 read_write_db에서 다시 쿼리하고 업데이트해야합니까?

답변

0

예, 가능합니다. 을 read_write_db 님의 세션에 병합하여 새 인스턴스를 얻어야합니다.

with session.begin(subtransactions=True): 
    merged_db_obj = session.merge(db_obj) 
    # work with merged_db_obj ... 

자세한 내용은 http://docs.sqlalchemy.org/en/rel_0_9/orm/session.html#merging을 참조하십시오. 합병은 까다로울 수 있습니다.