ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ORM | ODM +Mongo DB 특징
    대학 수업/Fast API 2024. 11. 19. 13:20

     

    @router.put('/{id}', response_model = EventPublic)
    async def update_event(
            id : int,
            event : EventUpdate,
            user: User = Depends(authenticate),
            session : Session = Depends(get_session)) :
    
        for db_event in user.events:
            if event.id == id:
                user.event.remove(event) # 객체의 (연결된)속성을 수정하면 relation에 반영되지 않는다 - 원본에서 바뀐게 없으니까
                event_data = event.model_dump(exclude_unset=True) # 객체에 어떤 Operation을 사용할 떄 테이블에 어떻게 작용할 것인가?
                db_event.sqlmodel_update(event_data)
                user.events.append(db_event)
                session.add(user) # 
                session.commit()
                return db_event
                
        raise HTTPException(
            status_code=status.HTTP_404_NOT_FOUND,
            detail="Event with supplied id is not found"
        )

     

     

    그렇다면, 적용하기 위해서는, 아예 relation전체를 지우고, 다시 내용을 올리면, User의 내용이 바뀐것과 동일하게 취급하여 반영될 수 있다.

     

     

    • delete cascading :  
      • db driver :  sql Alchemy(lapping 대상) 수준에서 지원하기
      • db 에 속성 설정하기(On depend)
    class User(UserBase, table =True) :
        id : Optional[int] = Field(default = None, primary_key= True)
        hashed_password : str = Field(min_length=4 , max_length=25)
    # 상호참조중이기에 문제가 된다 // 한쪽을 문자열로 주면 type annotation을 통해 알아서 지정해준다?
        events : List["Event"] = Relationship(back_populates='user', cascade_delete=True)
    class Event(EventBase, table = True) :
        id : Optional[int] = Field(default = None, primary_key= True)
        user_id : int = Field(foreign_key="user.id", ondelete="CASCADE") #DB관련 정보
    
        user : User = Relationship(back_populates='events')

    No only SQL : SQL을 사용하지 않고 db 작업 함

    • 수평확장 가능 분산 시스템
    • Schema-less
    • 완화된 ACID transaction조건put('/{id}', response_model = EventPublic)
      • 원자성 
      • 일관성 
      • 고립성
      • 지속성
    • BASE(Basically Available, Soft state, Eventual consistency)
      • 기본적으로 사용 가능
        • 가용성 필요
      • 소프트 상태
        • 외부 개입 없이도 정보 변경 가능
        • 네트워크 파티션 문제 등으로 인한 일관성 문제 발생 시, 데이터 자동 수정
      • 최종 일관성
        • 일시적으로 일관성이 깨지더라도 일정 시간 뒤엔 일관성 유지
    • => 빠른성능과 수평확장을 요구하는 데이터 베이스 시스템 요구
    • ==>이러한 요구사항을 충족 위한 데이터 무결성 희생, BASE트랜젝션 처리 수행

    Binary Json : Bson

    객체가 저장된 Docu : 의 저장하기 좋은 Json  : 을 Binary

     

    저장 대상 데이터 + Key값 필드추가(ObjectId)

    • 자동생성 + Unique값 : timestamp, RandomValue(3:이더넷 주소+2:),Count
    • Primarykey : DBMS의 자동부여 | ObjectId 는 클라이언트 생성 

     

    파이썬 라이브러리 : Motor? , collection 수준 조작 + Document수준에서도 작업 가능 API

     

    ODM : Object Document Management

     

    ODM  / ORM 비교 필요

     

     

     

     

     

     

     

     

    '대학 수업 > Fast API' 카테고리의 다른 글

    Pymongo  (0) 2024.11.25
    토큰?  (0) 2024.11.18
    토큰 적용법  (0) 2024.11.12
    보안  (0) 2024.11.11
    인터프리터와 컴파일러 그리고 IDE  (2) 2024.09.02
Designed by Tistory.