본문 바로가기
Python

Python - SQLAlchemy로 row 업데이트(update) 방법 3가지

by 올엠 2024. 2. 19.
반응형

SQLAlchemy로 row 업데이트하는 방법 으로 여기에서는 많이 사용되는 3가지 방법에 대해서 정리해 본다..

 

1. update() 함수 사용:

update 함수는 Metadata를 이용해서 테이블 정보를 가져오는 경우 사용할 수 있다.

from sqlalchemy import update


# 업데이트할 테이블 선택
table = User

# 업데이트 조건 설정
where_clause = table.c.id == 1

# 업데이트할 값 설정
values = {"name": "새로운 이름"}

# 업데이트 쿼리 실행
session.execute(update(table).where(where_clause).values(values))
session.commit()

 

2. Model 객체 수정:

이는 모델 구조를 Class로 생성한 경우 Session의 Query를 이용해서 값을 업데이트 하는 것인데 Query로 가져온 값을 업데이트하여 Commit하는 구조이다.

from sqlalchemy.orm import sessionmaker

# 세션 생성
session = sessionmaker()

# 업데이트할 객체 가져오기
user = session.query(User).filter(User.id == 1).first()

# 값 변경
user.name = "새로운 이름"

# 변경 사항 저장
session.commit()

 

만약 업데이트할 객체가 있는지 확인한 후에 작업하는 방식은 아래와 같다.

from sqlalchemy.orm import sessionmaker


# 세션 생성
session = sessionmaker()

# 업데이트할 객체 존재 여부 확인
user = session.query(User).filter(User.id == 1).first()


# 객체가 존재하는 경우 업데이트
if user:
    # 값 변경
    user.name = "새로운 이름"

    # 변경 사항 저장
    session.commit()
else:
    print("업데이트할 객체가 없습니다.")

3. ORM 쿼리 사용:

앞써 진행한 2. Model 방식과 비슷한 방식이지만, 여기에서는 쿼리 시점에 업데이트를 진행할 수 있는 방식이다.

from sqlalchemy import update

# 업데이트할 테이블 선택
table = User

# 업데이트 조건 설정
where_clause = table.c.id == 1

# 업데이트할 값 설정
values = {"name": "새로운 이름"}

# 업데이트 쿼리 실행
session.query(table).filter(where_clause).update(values=values)
session.commit()

더 복잡한 업데이트 작업은 SQLAlchemy 문서를 참고하면 보다 자세한 방법들을 이해 할 수 있다.

참조:

https://docs.sqlalchemy.org/20/tutorial/data_update.html

 

Using UPDATE and DELETE Statements — SQLAlchemy 2.0 Documentation

SQLAlchemy 1.4 / 2.0 Tutorial This page is part of the SQLAlchemy Unified Tutorial. Previous: Using SELECT Statements | Next: Data Manipulation with the ORM Using UPDATE and DELETE Statements So far we’ve covered Insert, so that we can get some data into

docs.sqlalchemy.org

https://stackoverflow.com/questions/9667138/how-to-update-sqlalchemy-row-entry

 

How to update SQLAlchemy row entry?

Assume table has three columns: username, password and no_of_logins. When user tries to login, it's checked for an entry with a query like user = User.query.filter_by(username=form.username.data)...

stackoverflow.com

 

반응형