반응형
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()
반응형
'DBMS, 데이터베이스' 카테고리의 다른 글
SQLAlchemy ORM에서 DBMS 현재 시간 가져오기 (0) | 2023.08.11 |
---|---|
파이썬, SQL Server 연결 (pyodbc) (0) | 2023.08.04 |
MariaDB, MySQL에서 페이지 단위로 검색하기 (0) | 2023.04.22 |
파이썬, PostgreSQL의 with 문을 사용한 경우 연결 객체 누수 (0) | 2023.04.22 |
MySQL 쿼리 기능 요약 (0) | 2022.09.27 |