제수기 - 제발 수업내용을 기억해라 / 단순 수업정리 시리즈
setting의 database를 보면 sqlite가 있다. 데이터베이스다. 경량이라 잠깐 테스트할 때는 이걸로도 충분하다. 그런데 우리는 sqldb로 바꿔줄거다.
앱을 만들고 나면 setting에서 이름을 넣어줘야 한다.
프레임워크에서 DB작업을 쉽게 처리할 수 있도록 지원하는 추상화 레이어다.
SQL쿼리를 직접 작성하지 않고, 파이썬 코드로써 DB와 통신할 수 있다.
최적화된 SQL을 대신 작성해주지만, DBMS 특화적인 기능이나, 복잡한 쿼리는 직접 작성할 수도 있다.
Model 클래스를 통해 Table을 설계하는 방식
이때 Model 클래스의 객체는 Table의 record(row)와 매칭된다. # record는 한 행이다.
💥px 컬럼 id는 자동으로 선언된다.
RDB는 테이블간의 관계를 본다. PK와 FK가 필요하다. 그래서 id는 django에서 자동으로 만들어주는 pk다!
모델과 테이블간의 동기화 작업을 해보자.
모델에 있는 내용을 DB쪽에 일방적으로 영향을 주는 마이그레이션.
터미널에 python manage.py makemigrations post
설치
아래와 같이 생겼다. 그런데 이름이 💥왜 포스트 포스트냐! 앱이름 + 모델 이름
실제 orm에서는 db가 로드가 돼야 하는데
파이썬 코드를 sql로 바꾸는 작업도 필요하고,
결과집합이 오면 그걸 다시 파이썬으로 바꾸는 작업들이 필요하다.
이걸 담당해주는 manager 객체가 모델마다 있다.
그 매니저객체를 가져오는 방법은 Post.objects
쉘에 와서 다시 보면 나온다.
인덱스도 되고
이것저것 다 잘 나온다.
쿼리 날린 것도 확인할 수 있다.
Post.objects.all() 다 확인하기
PX 넣고 하나만 볼 수도 있다.
Post.objects.get(id=1) 한 건만 조회
커넥션 쿼리즈.로 볼 수도 있다.
connection.queries(-1) 마지막 쿼리 확인하기
WHERE post_post
.id3
: id 3하나만 가져와라
LIMIT 21' : 20개씩 끊어서 조회하는데, 1개 더 해서 그 다음것도 해 말아? 라고 보여주는 것.
컨트롤 제트 엔터
created_at = models.DateTimeField(auto_now_add=True) # 날짜/시각형 # 추가시 현재시각 지정
updated_at = models.DateTimeField(auto_now=True) # 날짜/시각형 # 저장할 때마다 현재시각 지정
설정을 바꾸고, 터미널을 두 개로 만든다. 하나는 마이그레이트용이다.
저장을 해줘야 나온다.
get은 한 건 조회다. 한 건 조회가 안 되면 오류난다. 0건 나와도 2건 나와도 3건 나와도 오류가 나는 게 get. 주로 pk 컬럼 조회 용도로 쓰인다.
filter는 기본적으로 여러건을 담을 수 있는 QuerySet으로 반환이 된다.
날짜를 조회해보자.
-- 이건 꺽쇠같은 역할
gt 이후 날짜를 찾아주세요 라는 요청
Hello가 포함된 행을 찾아주세요
filter(condition, condition)
or filter(Q() | Q())
-불러온 다음에 해야 한다.
수정
삭제