코딩캠프/AI 웹개발 취업캠프

[AI 웹개발 취업캠프] 78Day - 프로젝트 29일차

고랑E 2023. 11. 9. 23:06
728x90

프로젝트 마지막 전날!!

드디어 하루 남았는데.. 너무 아쉽다.. 난 내가 할일을 하자

 

백오피스에서 회원 목록 불러오는걸 하자

 

 

main.py

# 상단에 get_all_user_info 추가
from BE.crud import create_user, get_user, verify_password, get_user_info, update_user_info, get_models, get_my_models, create_model, get_model, user_image, email_code, check_email_code, user_image, user_model, model_ipynb, model_img, get_result_img, get_all_user_info
@app.get("/admin/users")
def all_user_info(db: Session = Depends(get_db)):
    users_info_db = get_all_user_info(db)
    return users_info_db

 

 

crud.py

def get_all_user_info(db: Session):
    return db.query(User).all()

 

 

이렇게 테스트를 해보면

 

 

비밀번호 컬럼도 불러와서 필요한 컬럼만 불러오게 해보자

 

이전에 사용했던 with_entities() 을 사용 해봤다.

 

crud.py 를 수정하고

def get_all_user_info(db: Session):
    return db.query(User).with_entities(User.email, User.nickname, User.role, User.login_method, User.image, User.created_at).all()

 

테스트를 해봤다

 

 

에러가 나오는데

딕셔너리 업데이트에 시퀀스의 길이가 잘못되었다는 에러를 볼수있고

vars() 함수의 인자로 dict 속성이 있는 객체를 전달해야한다고 나와있다..

음 그래서 with_entities() 메서드에 대해서 알아보았다.

with_entities() 메서드는 쿼리 객체에서 반환할 컬럼을 지정하는데 사용된다

고로 쿼리 결과에서 특정 컬럼을 선택적으로 가져올때 사용? 된다.

 

그래서 다른걸 찾아봤다

options() 메서드에 load_only() 라는 함수가 있다

참고한 문서를 보면

https://docs-sqlalchemy.readthedocs.io/ko/latest/orm/loading_columns.html#sqlalchemy.orm.load_only

 

Loading Columns — SQLAlchemy 1.1 Documentation

This section presents additional options regarding the loading of columns. Deferred Column Loading This feature allows particular columns of a table be loaded only upon direct access, instead of when the entity is queried using Query. This feature is usefu

docs-sqlalchemy.readthedocs.io

 

load_only 함수는 options 메서드와 함께 사용하고 특정 컬럼만 지정해서 가져올 수 있다라고 나와있다.

 

다음과 같이 코드를 수정하고

# 상단에 load_only 추가
from sqlalchemy.orm import Session, load_only
def get_all_user_info(db: Session):
    return db.query(User).options(load_only(User.email, User.nickname, User.role, User.login_method, User.image, User.created_at)).all()

 

테스트를 해보면

 

 

보는것 처럼 특정 컬럼만 가져와진다.

 

 

 

본 후기는 정보통신산업진흥원(NIPA)에서 주관하는 <AI 서비스완성! AI+웹개발 취업캠프 - 프론트엔드&백엔드> 과정 학습/프로젝트/과제 기록으로 작성되었습니다.