본문 바로가기

FASTAPI 사용을 위한 SQLAlchemy(ORM) 기초 - 2탄 삭제, 수정

ironwhale 2022. 7. 5.

SQLAlchemy로 삭제하는 법과 수정하는 법

FASTAPI 사용을 위한 SQLAlchemy(ORM) 기초 1탄에 이어 이번에는 SQL 알케미로 삭제하는법과 수정하는 법을 정리해보 겠습니다. 


삭제하기(DELETE)

삭제하기는 간단합니다. 특정 데이터를 가지고 오는 Select문을 작성한 객체를 만들어서

세션의 삭제하는 함수에 변수로 넣어 주면 됩니다.

def delete_users(db:Session,pk:int):

    # db_user = db.query(User).filter(User.id==pk).first()
    db_user = db.execute(select(User).filter(User.email=="user.email")).scalars().first()

    if db_user:
        db.delete(db_user)
        db.commit()
        return print("Delete!!")
    else:        
        return print("Not Exist")
  • db_user = db.query(User).filter(User.id==pk).first() 이 코드는 1.x버전 스타일이라고 하네요
  • db_user = db.execute(select(User).filter(User.email=="user.email")).scalars().first() 위에 코드가 2.0 스타일 코드라고 하니 참조하시기 바랍니다.
  • 이곳을 참조하여 2.0스타일로 작성하였습니다.

실제 삭제 하는 사용 코드

delete_users(db=db,pk=3)
db.close()

수정하기(Update)

업데이트도 삭제로 똑같습니다. 단지 delete에서 add로만 바뀐 차이만 있습니다.

class UpdateUser(UserCreate):
    id: int        
    class Config:
        orm_mode = True

def update_users(db:Session,user:UpdateUser):
    db_user = db.query(User).filter(User.id==user.id).first()
    if db_user:
        db_user.email = user.email
        db.add(db_user)
        db.commit()
        return db_user.email
    else:        
        return print("Not Exist")
  • 이전에 만든 파이단틱 클래스인 UserCreate 클래스를 상속받아 새로운 UpdateUser 클래스를 만들었습니다. 이렇게하면 UpdateUser 인스턴스도 email 변수를 가질수 있게 됩니다.

사용 하는 코드

data = {
    "id": 9,
    "email":"update1",
}
user = UpdateUser(**data)

update_users(db=db,user=user)

 

3탄은 여러가지 Select문에 대해 정리

 

다음은 여러가지 Select문에 대해 정리하는 포스팅을 하겠습니다. 사실 SQL을 공부하면서 가장 많이 사용하는 것이 SELECT 문인데요 여러가지 방법으로 SQL 알케미를 이용해서 SELECT문을 작성할수 있더군요 다음 포스팅을 끝으로 SQLALCHEMY 기초 시리즈는 마무리 하도록 하겠습니다. 

 

2022.07.04 - FASTAPI 사용을 위한 SQLAlchemy(ORM) 기초 - 1탄

 

FASTAPI 사용을 위한 SQLAlchemy(ORM) 기초 - 1탄

다시 정리하는 SQL 알케미 본 내용은 https://fastapi.tiangolo.com/ko/tutorial/sql-databases/ 해당 링크의 설명과 공식문서를 참조하였습니다. 이전에 2021.08.16 - SQLALCHEMY를 이용한 PostgreSQL 사용법 을..

jh-industry.tistory.com

 

 

댓글