Programming Language/Django

Django 04) SQLite 기초

Sergemeow 2023. 4. 11. 14:09

마우스 우클릭으로 확인 가능

  • 편의를 위한 외부 라이브러리 설치

pip install ipython

pip install django-extensions

가상환경에서 설치하기.

freeze 틈틈히 해두기(pip freeze > requiremets.txt

setting에 추가.


  • ORM 관련 구문 연습을 위해 파이썬 쉘 환경을 사용
  • shell_plus로 진행

python manage.py shell_plus

python코드를 통해 DB 조작 가능

Database API

  • django가 제공하는 ORM을 사용해 데이터베이스를 조작하는 방법
  • Model을 정의하면 데이터를 CRUD할 수 있는 API를 제공

Article.objects.all()

modelclass.manager.queryset API

  • objects manager
    • django 모델이 데이터베이스 쿼리 작업을 가능하게 하는 인터페이스
    • django는 기본적으로 모든 django 모델 클래스에 대해 objects라는 manager 객체를 자동으로 추가함
    • 이 manager를 통해 특정 데이터 조작 가능
    • DB를 python class로 조작할 수 있도록 여러 메서드를 제공하는 manager

Query

  • 데이터베이스에 특정한 데이터를 보여달라는 요청
  • 파이썬으로 작성한 코드가 ORM에 의해 SQL로 변환되어 데이터베이스에 전달되며, 데이터베이스의 응답 데이터를 ORM이 QuerySet이라는 자료 형태로 변환하여 우리에게 전달

QuerySet

  • 데이터베이스에게서 전달받은 객체 목록(데이터 모음)
    • 순회가 가능한 데이터로써 1개 이상의 데이터를 불러와 사용 가능
  • Django ORM을 통해 만들어진 자료형이며, 필터를 걸거나 정렬 등을 수행할 수 있음
  • objects manager를 사용하여 복수의 데이터를 가져오는 queryset method를 사용할 때 반환되는 객체
  • 데이터베이스가 단일한 객체를 반환할 때는 QuerySet이 아닌 class의 인스턴스로 반환됨


QuerySet API를 통한 CRUD

Create

  • 첫번째 방법
  1. article = Article()
  2. 클래스를 통한 인스턴스 생성
  3. article.title
  4. 클래스 변수명과 간은 이름의 인스턴스 변수를 생성 후 값 할당
  5. article.save()
  6. 인스턴스로 save 메서드 호출

  • 두번째 방법

인스턴스 생성 시 초기 값을 함께 작성하여 생성

article = Article(title='second', content='django')

article.save()
  • 세번째 방법

QuerySet API 중 create() 메서드 활용

Article.objects.create(title='third', content='django')
  • .save()
    • 객체를 데이터베이스에 저장함
    • 데이터 생성 시 save를 호출하긱 전에는 객체의 id값은 none
      • id값은 django가 아니라 데이터베이스에서 계산되기 때문
    • 단순히 모델 클래스를 통해 인스턴스를 생성하는 것은 DB에 영향을 미치지 않기 때문에 반드시 save를 호출해야 테이블에 레코드가 생성됨

Read

  • QuerySet API method를 사용해 데이터를 다양하게 조회하기
  • QuerySet API method는 크게 두가지로 분류됨
    • methods that “return new querysets”
    • methods that “do not return querysets”
# all()
# QuerySet return
# 전체 데이터 조회
Article.objects.all()
# get()
# 단일 데이터 조회
# 객체를 찾을 수 없으면 doesnotexist 예외 발생
# 둘 이상의 객체를 찾으면 multipleobjectsreturned 예외 발생

Article.objects.get(pk=1)
# filter()
# 지정된 조회 매개변수와 일치하는 객체를 포함하는
# 새 QuerySet 반환

Article.objects.filter(content='django')
# field lookups
# 특정 레코드에 대한 조건을 설정하는 방법
# QuerySet 메서드 filter(), exclude() 및 get()에 대한 인자

Article.objects.filter(content__contains='dj')

Update

  • 수정하고자하는 article 인스턴스 객체를 조회 후 반환 값을 저장
  • article 인스턴스 객체의 인스턴스 변수 값을 새로운 값으로 할당
  • save() 인스턴스 메서드 호출
article = Article.objects.get(pk=1)
# 인스턴스 변수를 변경
article.title = 'changed'
# 저장
article.save()
# 정상적으로 변경된 것을 확인
article.title
'byebye'


Delete

  • 삭제하고자하는 article 인스턴스 객체를 조회 후 반환 값을 저장
  • delete() 인스턴스 메서드 호출

'Programming Language > Django' 카테고리의 다른 글

Django 06) CRUD_2  (0) 2023.04.11
Django 05) CRUD_1  (0) 2023.04.11
Django 03) Form & Data  (0) 2023.04.11
Django 02) MTV 구조  (0) 2023.04.11
Django 01) 첫걸음  (0) 2023.04.11