record.js 에서 nickname과 sleep_info_id 서버로 전달
console.log("닉네임 값:", nickname); // 닉네임 값을 확인하기 위한 로그
const sleepInfoId = document.getElementById("sleep_info_id").value;
console.log("수면정보아이디 값", sleepInfoId); // 수면정보 아이디 값 확인
const requestData = {
nickname: nickname, // 닉네임을 데이터 객체에 추가
sleep_info_id: sleepInfoId,
};
fetch("/record/info_and_event", {
method: "POST", // 데이터를 보내기 위해 POST 방식 사용
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(requestData),
})
.then((response) => {
if (response.ok) {
return response.json();
} else {
throw new Error("네트워크 응답이 정상적이지 않습니다.");
}
})
.then((data) => {
console.log("받은 데이터:", data);
// 받은 데이터를 처리하거나 표시
})
.catch((error) => {
console.error("요청에 문제가 있습니다:", error);
});
schemas.py
class SleepInfoIdNickname(BaseModel):
sleep_info_id: int
nickname: str
crud.py
def get_related_info_and_events_by_nickname(db: Session, nickname: str, sleep_info_id: int):
# 닉네임과 sleep_info_id가 일치하는 sleep_event테이블의 sleep_info_id를 가져옵니다.
db_info_event_data = db.query(model.SleepInfo, model.SleepEvent).join(
model.SleepEvent, model.SleepInfo.sleep_info_id == model.SleepEvent.sleep_info_id
).filter(
model.SleepInfo.sleep_info_id == sleep_info_id,
model.SleepInfo.nickname == nickname
).all()
return db_info_event_data
api_record.py
@router.post("/record/info_and_event")
async def get_info_and_events(info_event_data:SleepInfoIdNickname, db: Session = Depends(get_db)):
db_info_event_data = get_related_info_and_events_by_nickname(db, info_event_data.nickname, info_event_data.sleep_info_id)
print("제발",db_info_event_data) # 여기에 해당 데이터를 출력
return db_info_event_data
SQLAlchemy의 query 함수를 사용하여 SleepInfo와 SleepEvent 모델에 대한 쿼리를 생성하여
두 테이블을 조인하여 SleepInfo의 sleep_info_id와 SleepEvent의 sleep_info_id가 서로 일치하는 경우에만 데이터를 반환하려고 함
주어진 sleep_info_id와 nickname 값과 일치하는 데이터를 찾아 모두 가져오려고 하는데
반환하는 데이터가 ,, 없다,,
오류가 나는 것은 아닌데,, 무엇이 잘못된 것인지,, 잘 모르겠다,,
값은 잘 전달하고 있는 거 같은데,, 당황스럽다,,
여러 시도를 하고 있는데 제일 맞다고 생각한 게 안된다,, 조금 더 고민해봐야 할 거 같다,,
시도 1:
아 다시 보니 수면이벤트 테이블에 값이 저장이 안 되어서 그런 것이었다.
저장을 하고 다시 불러왔지만
TypeError: cannot convert dictionary update sequence element #0 to a sequence 에러가 나왔다,, 그래도 조금 희망차다
시도 2:
대대적인 변화를 거쳐
schemas.py
# Pydantic 모델을 사용하여 요청의 body에서 데이터를 추출
class RequestData(BaseModel):
nickname: str
sleep_info_id: int
class SleepInfoGet(BaseModel):
total_sleep: str
start_sleep: str
sleep_event: List[str] = []
event_time: List[str] = []
crud.py
def get_sleep_info_with_events_by_nickname_and_id(db: Session, nickname: str, sleep_info_id: int):
return db.query(model.SleepInfo.total_sleep, model.SleepInfo.start_sleep, model.SleepEvent.sleep_event, model.SleepEvent.event_time).\
join(model.SleepEvent).\
filter(model.SleepInfo.nickname == nickname).\
filter(model.SleepInfo.sleep_info_id == sleep_info_id).\
filter(model.SleepEvent.sleep_info_id == model.SleepInfo.sleep_info_id).\
all()
api_record.py
@router.post("/record/info_and_event", response_model=SleepInfoGet)
async def get_info_and_events(request_data: RequestData, db: Session = Depends(get_db)):
db_info_event_data = get_sleep_info_with_events_by_nickname_and_id(
db, request_data.nickname, request_data.sleep_info_id
)
results = SleepInfoGet(total_sleep='', start_sleep='', sleep_event=[], event_time=[])
sleep_events = []
event_times = []
for info in db_info_event_data:
results.total_sleep = info.total_sleep
results.start_sleep = info.start_sleep
sleep_events.append(info.sleep_event)
event_times.append(info.event_time)
results.sleep_event = sleep_events
results.event_time = event_times
return results
원하는 대로 값을 불러올 수 있었다,,,
잘못했던 것은 schemas.py에 반환받을 데이터의 형태를 지정해주어야 하는데 그렇게 하지 못했고
crud.py에서 select해올 때도 어떤 테이블의 어떤 칼럼을 가져올지 정해주지도 않았다.
api_record에서는 내가 다시 클라이언트로 돌려보내줄 때의 형태를 정해주지 않았고 for 문으로 전체 데이터를 조회시키지 않았기 때문이었다.
해결해서 다행이다,,
'오류 > 해결' 카테고리의 다른 글
자바스크립트에서 html로 값 보낼때 input value에 값이 넘어가지 않음 (0) | 2023.10.24 |
---|---|
formData로 이미지 blob데이터 서버로 보낼때 422 unprocessable entity 에러 (0) | 2023.10.19 |
[Mac OS] VScode에서 No module named 'MySQLdb'오류 해결 (0) | 2023.09.18 |
Mac에서 Github ssh키 발급 및 삭제와 등록하는 방법 (0) | 2023.09.14 |
댓글