반응형

sqlalchemy orm, 데이터 업데이트 방법 세가지 차이점 

 

  • commit(): 세션에 기록된 모든 변경사항을 데이터베이스에 실제로 적용한다. 일반적으로 add(), delete() 등과 함께 사용된다. db.rollback()으로 롤백 가능하다(db: session).
    try:
        user = User(name="New User")
        session.add(user)
        session.commit()
    except Exception as e:
        session.rollback()
        print(f"Error: {e}")

 

  • merge(): 인자로 주어진 객체의 상태를 세션에 병합한다. 변경사항을 적용하려면 commit()이 필요하다. db.rollback()으로 롤백 가능하다(db: session).
    try:
        merged_user = session.merge(user)
        session.commit()
    except Exception as e:
        session.rollback()
        print(f"Error: {e}")

 

  • update(): 특정 조건을 충족하는 여러 레코드를 한 번에 갱신하는 데 사용되며, query를 통해 변경하려는 객체들을 반환하고 commit() 실행 시 데이터베이스에 적용된다. db.rollback()으로 롤백할 수 없으므로, with 블록을 사용하여 세션을 트랜잭션으로 감싸서 롤백을 관리해야 한다. 
    from sqlalchemy.exc import SQLAlchemyError

    try:
        with session.begin():
            session.query(User).filter(User.age < 18).update({User.age: 18})
            # raise an error here to trigger rollback
    except SQLAlchemyError as e:
        print(f"Error during update transaction: {e}")
        session.rollback()

 

반응형

+ Recent posts