목차
반응형
update는 조건에 따라 값을 변경해주는 것이기 때문에,
복잡한 개념이 필요가 없어서 편하다.
여기서도 마찬가지로, SQL 방식과 ORM 방식으로 나눠서 공부해보자
1. SQL 방식
1.1. 기본 사용 방법
update() 함수를 사용
where() 함수로 필터링
values() 함수에 변경할 값을 입력
from sqlalchemy import update
stmt = (
update(User)
.where(User.id == 1)
.values(name="New Name", email="new_email@example.com")
)
await db.execute(stmt)
await db.commit()
Json 데이터 이용 하기
stmt = (
update(User)
.where(User.id == 1)
.values(settings={"name": "김철수", "email": "abc@daum.net"})
)
1.2. 동적 값 업데이트
딕셔너리를 이용해 동적 업데이트
update_values = {"name": "Dynamic Name", "email": "dynamic_email@example.com"}
stmt = (
update(User)
.where(User.id == 1)
.values(**update_values)
)
2. ORM 방식
객체의 속성을 변경해주고 바로 commit을 해주면 된다!
# 특정 사용자 조회 후 데이터 수정
stmt = select(User).where(User.id == 1)
result = await db.execute(stmt)
user = result.scalars().first()
if user:
user.name = "Updated Name"
user.email = "updated_email@example.com"
await db.commit()
3. FastAPI 예시
@app.put : 리소스를 완전히 대체
@app.patch: 리소스의 일부분 수정
@app.patch("/users/{user_id}")
async def update_user(user_id: int, email: str, db: AsyncSession = Depends(get_db)):
stmt = (
update(User)
.where(User.id == user_id)
.values(email=email)
.returning(User.id)
)
result = await db.execute(stmt)
await db.commit()
if not result.rowcount:
raise HTTPException(status_code=404, detail="User not found")
return {"message": "User updated successfully"}
반응형
'Fastapi' 카테고리의 다른 글
[FastAPI] JWT 기반 인증 (7) (1) | 2025.01.01 |
---|---|
[FastAPI] SQLAlchemy 상세 - Delete (6-4) (0) | 2025.01.01 |
[FastAPI] SQLAlchemy 상세 - Read/Select (6-2) (1) | 2025.01.01 |
[FastAPI] SQLAlchemy 상세 - Create/Insert (6-1) (0) | 2024.12.31 |
[FastAPI] Sqlalchemy와 CRUD (6) (1) | 2024.12.31 |