연습 - 데이터 작업

완료됨

모델을 만들어 데이터베이스의 데이터에 액세스하는 데 사용할 수 있는 API를 만들었습니다. 이 API를 사용하여 데이터베이스에서 개체를 만들고, 검색하고, 업데이트하고, 삭제할 수 있습니다.

만든 모델을 사용하여 API를 살펴보겠습니다.

대화형 셸 구성

Django에는 Django 환경에서 Python 코드를 실행할 수 있는 대화형 셸이 포함되어 있습니다.

  1. 보기>터미널을 선택하여 Visual Studio Code의 터미널로 돌아갑니다.

  2. 다음 명령을 입력하여 셸을 시작합니다.

    python manage.py shell
    
  3. dog_shelters 내부의 models에서 모델을 가져옵니다.

    from dog_shelters.models import Shelter, Dog
    

개체 만들기 및 수정

모델은 Python 클래스이므로 개체를 만드는 데 사용하는 것과 동일한 구문을 사용하여 새 인스턴스를 만듭니다. Django.models.Model에서 상속되기 때문에 Django ORM의 기능을 상속합니다. 이 기능에는 개체를 데이터베이스에 저장하는 데 사용하는 save이 포함됩니다.

  1. 셸에서 다음 Python 명령을 실행하여 새 보호소를 만듭니다.

    shelter = Shelter(name="Demo shelter", location="Seattle, WA")
    shelter.save()
    

    save 파트는 개체를 데이터베이스에 씁니다. 이를 처음부터 만들었으므로 데이터베이스에서 INSERT 문을 실행합니다.

  2. location 필드를 설정하고 save를 호출하여 보호소 위치를 워싱턴주 레드몬드로 업데이트합니다.

    shelter.location = "Redmond, WA"
    shelter.save()
    

    이 명령은 UPDATE 문을 실행하여 데이터베이스의 값을 업데이트합니다.

  3. 셸에서 다음 Python 명령을 실행하여 보호소에 보낼 유기견 두 마리를 새로 만듭니다.

    Dog(name="Sammy", description="Cute black and white dog", shelter=shelter).save()
    Dog(name="Roscoe", description="Lab mix", shelter=shelter).save()
    

    이전과 마찬가지로, save는 유기견을 삽입합니다. shelter 매개 변수를 이전에 만든 shelter 객체로 설정하는 방법에 주목하세요. Django는 데이터베이스에서 관계를 자동으로 설정합니다.

    또한 각 Dog 인스턴스에 대해 지역 변수를 설정하지 않았습니다. 개체를 다시 사용하지 않으므로 변수로 설정할 필요가 없습니다.

개체 검색

데이터베이스에서 개체를 검색하기 위해 Django는 모든 Model 클래스에 objects 속성을 제공합니다. objects 속성은 all, filterget를 포함한 여러 함수를 제공합니다.

  1. 다음 명령을 실행하여 데모 보호소에 있는 모든 유기견을 검색합니다.

    shelter.dog_set.all()
    

    dog_set 파트는 특정 보호소에 관한 모든 유기견 목록을 저장합니다. Django는 우리가 만든 두 유기견과 함께 QuerySet 객체를 반환합니다.

    <QuerySet [<Dog: Sammy>, <Dog: Roscoe>]>
    
  2. 다음 명령에 표시된 대로 get을 사용하여 두 번째 유기견을 검색하세요.

    Dog.objects.get(pk=1)
    

    get 함수는 개체를 하나만 반환합니다. 매개 변수를 get에 전달하여 쿼리 문자열을 제공할 수 있습니다. 여기서는 기본 키를 나타내는 특별한 키워드인 pk 를 사용합니다. 반환된 결과는 Sammy입니다.

    <Dog: Sammy>
    
  3. 다음 명령에 표시된것처럼 filter를 사용하여 데모 보호소에 있는 모든 유기견을 검색합니다.

    Dog.objects.filter(shelter__name='Demo shelter')
    

    get과 마찬가지로 filter를 사용하면 매개 변수에 쿼리를 전달할 수 있습니다. 두 개의 밑줄(__)을 사용하여 속성에서 속성으로 이동할 수 있습니다. 데모 보호소라는 이름의 보호소에서 모든 유기견을 찾으려고 하므로 shelter__name을 사용하여 sheltername 속성에 액세스합니다. 하나의 보호소만 있기 때문에 반환되는 결과는 모든 유기견입니다.

    <QuerySet [<Dog: Sammy>, <Dog: Roscoe>]>
    

셸 닫기

개체 사용을 마친 후 exit() 명령을 실행하여 셸을 닫을 수 있습니다.

요약

Django ORM을 통해 Django에서 데이터를 프로그래밍 방식으로 사용할 수 있는 방법을 살펴보았습니다.