내일배움캠프 TIL 23/09/20

김민재·2023년 9월 20일
0


  • Django ORM get() 과 filter() 함수의 차이
    우선, ORM은 sql이라는 언어를 사용하지 않고 데이터베이스와 프로그래밍언어를 연결해주는 통역기능을 의미한다고 생각하면 된다. 지금까지 익히고 익숙하게 사용해왔던 함수들을 데이터베이스에 유효하게 사용하는 것이 ORM을 나도 모르게 사용하고 있는 것이라 생각하면 된다고 한다.
    그래서 데이터베이스에 적용할 get() 함수는 하나의 값을 데이터베이스에서 뽑아오는 것이라 생각하면 된다. 더 정확하게 말하자면 하나의 행(row). 데이터베이스를 엑셀로 표현했을 때 고유한 PK값 하나가 가지고 있는 속성들(물론 PK를 포함해서)을 전부 하나의 행으로 묶어서 가져오는 것이다. get은 그래서 '하나'라는 속성에 주목해야한다. 만약 데이터베이스에서 가져올 데이터가 없거나 하나 이상일 경우 get함수는 error를 발생시킨다.
    반면, filter는 get과 달리 여러개의 값 또는 0(None)값을 가져오는 것이 가능하다. 차이점을 우선 설명했지만, 정확한 filter의 기능은 특정 조건에 맞는 row만 가져오는 것. 즉, .objects.filter(id=1)의 형태에선 id값을 1번으로 갖고 있는 행들을 가져오는 것. 액셀로 바꿔 생각한다면 filter를 걸어서 내가 원하는 조건으로 필터링을 거친 후에 해당하는 값들을 뽑아내는 것이라고 생각하면 된다.

이렇게 메서드를 사용하면 데이터베이스에서 QuerySet 형식으로 보통 전달받는다(get 경우에는 객체 형식). 이를 파이썬에서 읽고 쓰려면 자료형으로 변환을 해줘야 한다. dict형태의 쿼리셋을 list()함수로 묶어 변환해주는 방법도 유효할 것이다. 그리고 다양한 메서드들에 대해선 아래 블로그 글을 참고했다.
https://devvvyang.tistory.com/37

0개의 댓글