인프런 커뮤니티 질문&답변

HYO JIN Kim님의 프로필 이미지
HYO JIN Kim

작성한 질문수

처음하는 파이썬 백엔드 FastAPI 부트캠프 (FastAPI부터 비동기 SQLAlchemy까지) [풀스택 Part1-2]

SQLAlchemy 검색 기본 문법

섹션 12 SQLAlchemy 검색 기본 문법 질문

해결된 질문

작성

·

22

0

섹션 12 SQLAlchemy 검색 기본 문법

7분 54초

@app.get("/users/{user_id}")
def read_user(user_id: int, db: Session = Depends(get_db)):
    db_users = db.query(User.username, User.email).all()
    if db_users == []:
        return {"error": "User not found"}
    return {"db_users": db_users}

강의 내용과 동일하게 작성하여 실행 했는데,

아래와 같은 오류가 났습니다.

구글 검색 해 봐도... 잘 모르겠어서 질문 남겨봅니다...

 

ValueError: [ValueError('dictionary update sequence element #0 has length 6; 2 is required'), TypeError('vars() argument must have __dict__ attribute')]

 

 

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

HYO JIN Kim님께서 SQLAlchemy와 FastAPI를 사용해 데이터를 검색하는 과정에서 발생한 오류에 대해 설명드리겠습니다.

현재 제공해주신 코드에서 db.query(User.username, User.email).all() 부분은 데이터베이스에서 여러 사용자의 usernameemail만을 조회하고, 이를 리스트로 반환합니다. 그러나 오류 메시지로 보아, 반환된 결과를 잘못 처리하거나, 예상하지 못한 형식으로 값을 반환하고 있을 가능성이 있습니다.

해결 방안은 다음과 같습니다:

해결 방법:

  1. 데이터 형식 확인:
    query 메서드를 사용하여 데이터베이스로부터 데이터를 가져올 때는 반환 형식이 튜플의 리스트일 가능성이 큽니다. 따라서 db_users는 실제로는 리스트 of 튜플입니다. 이 경우 return {"db_users": db_users} 부분에서 JSON 직렬화 문제로 인해 오류가 발생할 수 있습니다.

  2. 데이터 변환:
    반환할 데이터를 딕셔너리 형식으로 변환해보세요. 예를 들어, 다음과 같이 사용할 수 있습니다:

   @app.get("/users/{user_id}")
   def read_user(user_id: int, db: Session = Depends(get_db)):
       db_users = db.query(User.username, User.email).all()
       result = [{"username": user.username, "email": user.email} for user in db_users]
       if not result:
           return {"error": "User not found"}
       return {"db_users": result}

기본적으로 User.usernameUser.email는 Attribute 보다는 실제로 값을 가지고 있는 객체이므로, 각 튜플을 반복하면서 딕셔너리 형식으로 변환하는 것이 필요합니다.

만약 위의 해결법으로도 문제가 지속된다면, 추가적인 코드나 오류 메시지를 공유해 주시면 더욱 구체적인 도움을 드릴 수 있습니다. SQLAlchemy와 관련된 다른 문제들이 아래 게시글에서는 다루어졌기도 합니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

HYO JIN Kim님의 프로필 이미지
HYO JIN Kim

작성한 질문수

질문하기