FastAPI Alembic 추가 실습하기 - 73

2023. 1. 24. 15:08·Develop/FastAPI
728x90
SMALL
사용자를 등록할 때 전화번호를 필수 열로 만든다.
apt_num의 열을 생성한다.
model에 apt_num열을 Optional로 생성한다.

 

1. auth.py 수정

#phone_number 열 추가
class CreateUser(BaseModel):
    username: str
    email: Optional[str]
    first_name: str
    last_name: str
    password: str
    phone_number: Optional[str]
    
#phone_number 열 추가
@router.post("/create/user")
async def create_new_user(create_user: CreateUser, db: Session = Depends(get_db)):
    create_user_model = models.Users()
    create_user_model.email = create_user.email
    create_user_model.username = create_user.username
    create_user_model.first_name = create_user.first_name
    create_user_model.last_name = create_user.last_name
    create_user_model.phone_number = create_user.phone_number

    hash_password = get_password_hash(create_user.password)

    create_user_model.hashed_password = hash_password
    create_user_model.is_active = True

    db.add(create_user_model)
    #db.flush()
    db.commit()

 

2. Swagger로 데이터 생성

 

3. Alembic으로 새 버전 생성

 

4. Alembic으로 테이블 열 생성

 

5. models.py 수정

#apt_num열 추가
class Address(Base):
    __tablename__ = "address"

    id = Column(Integer, primary_key=True, index=True)
    address1 = Column(String)
    address2 = Column(String)
    city = Column(String)
    state = Column(String)
    country = Column(String)
    postalcode = Column(String)
    apt_num = Column(Integer)

    user_address = relationship('Users', back_populates="address")

 

6. address.py 수정

#apt_num 추가
class Address(BaseModel):
    address1: str
    address2: Optional[str]
    city: str
    state: str
    country: str
    postalcode: str
    apt_num: Optional[str]
    


@router.post("/")
async def create_address(address: Address,
                         user: dict = Depends(get_current_user),
                         db: Session = Depends(get_db)):
    if user is None:
        raise get_user_exception()

    # address 테이블 데이터 생성
    address_model = models.Address()
    address_model.address1 = address.address1
    address_model.address2 = address.address2
    address_model.city = address.city
    address_model.state = address.state
    address_model.country = address.country
    address_model.postalcode = address.postalcode
    #apt_num 추가
    address_model.apt_num = address.apt_num

    db.add(address_model)
    db.flush()

    # user 테이블 데이터 업데이트
    user_model = db.query(models.Users).filter(models.Users.id == user.get("id")).first()
    user_model.address_id = address_model.id

    db.add(user_model)

    db.commit()

    return successful_response(200)

 

7. Postman으로 address 데이터 생성

 

728x90
SMALL
저작자표시 비영리 변경금지

'Develop > FastAPI' 카테고리의 다른 글

FastAPI 프로젝트 진행(CSS 및 static 폴더 구성) - 75  (0) 2023.01.25
FastAPI 프로젝트 진행(시작, HTML 렌더링) - 74  (0) 2023.01.25
FastAPI 테이블 관계 형성하기- 72  (0) 2023.01.24
FastAPI Alembic new 테이블 및 외래키 생성(Upgrade / Downgrade) - 71  (0) 2023.01.22
FastAPI What is Alembic(upgrade/ downgrade 실습) - 70  (2) 2023.01.22
'Develop/FastAPI' 카테고리의 다른 글
  • FastAPI 프로젝트 진행(CSS 및 static 폴더 구성) - 75
  • FastAPI 프로젝트 진행(시작, HTML 렌더링) - 74
  • FastAPI 테이블 관계 형성하기- 72
  • FastAPI Alembic new 테이블 및 외래키 생성(Upgrade / Downgrade) - 71
동석해요
동석해요
공부하고 싶은게 많은, 사소한 IT 지식들 공유
    250x250
  • 동석해요
    개발로 자기계발
    동석해요
  • 전체
    오늘
    어제
    • 분류 전체보기 (226)
      • Develop (126)
        • 기초지식 (12)
        • FastAPI (102)
        • Django (11)
      • Database & Data (62)
        • 기초지식 (16)
        • MySQL (29)
        • PostgreSQL (8)
        • 데이터 분석 (9)
      • 인공지능 (11)
        • PyTorch (9)
      • Cloud (8)
        • AWS (4)
        • GCP (2)
      • 버그처리 (14)
      • 회고 & 일상 (5)
  • 인기 글

  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
동석해요
FastAPI Alembic 추가 실습하기 - 73
상단으로

티스토리툴바