Django 곤ORM - 단일 테이블 인스턴스

32354 단어 django
ORM - 단일 테이블 인스턴스
프로젝트 만들기
django-admin.py startproject app01

settings에서.py에서 INSTALLED 수정APPS
INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app01',               #     
)

모델 생성하기
프로젝트의 모델스.py
# app01/models.py
class Sites(models.Model):
    id = models.AutoField(primary_key=True) # id      ,      
    title = models.CharField(max_length=32) #     
    price = models.DecimalField(max_digits=5, decimal_places=2) #     
    publish = models.CharField(max_length=32) #      
    pub_date = models.DateField() #     

명령을 집행하다
python3 manage.py migrate   #      

python3 manage.py makemigrations app01  #   Django                
python3 manage.py migrate app01   #      

참고: 데이터베이스 연결 필요
데이터 추가
라우팅 구성
# app01/urls.py
from django.contrib import admin
from django.urls import path
from . import views
 
urlpatterns = [
    path('add_book/', views.add_book),
]
  • 방식1: 모델류 실례화 대상
  • # app01/views.py
    from django.shortcuts import render,HttpResponse
    from app01 import models 
    def add_book(request):
        book = models.Book(title="python ",price=300,publish="hero",pub_date="2008-8-8") 
        book.save()
        return HttpResponse("

    "
    )
  • 방식2: ORM이 제공하는 Objects가 제공하는 방법create를 통해 실현
  • from django.shortcuts import render, HttpResponse
    from app01 import models 
    
    def add_book(request):
        books = models.Book.objects.create(title="    ", price=200, publish="     ", pub_date="2010-10-10") 
        return HttpResponse("

    "
    )

    데이터 찾기
  • all() 방법으로 모든 내용을 조회
  • 되돌아오는 것은QuerySet 형식 데이터입니다.list와 유사하며, 안에 놓인 것은 하나의 모델 클래스의 대상입니다. 색인 아래에 모델 클래스의 대상을 표시할 수 있습니다.
    # app01/views.py
    from django.shortcuts import render,HttpResponse
    from app01 import models 
    
    def add_book(request):
        books = models.Book.objects.all() 
        print(books, type(books)) # QuerySet  ,   list,   url             。
        return HttpResponse("

    "
    )
  • Filter() 방법은 조건에 맞는 데이터를 조회하는 데 사용
  • 되돌아오는 것은QuerySet 형식 데이터입니다. 안에 놓인 것은 조건을 만족시키는 모델 클래스의 대상입니다. 색인 아래에 모델 클래스의 대상을 표시할 수 있습니다.
    # app01/views.py
    from django.shortcuts import render,HttpResponse
    from app01 import models 
    def add_book(request):
        books = models.Book.objects.filter(pk=5)
        print(books)
        print("//")
        books = models.Book.objects.filter(publish='python', price=300)
        print(books, type(books))  # QuerySet  ,   list。
        return HttpResponse("

    "
    )

    주:pk는 primary key라는 뜻으로 id에 해당한다
  • exclude() 방법은 조건에 부합되지 않는 데이터를 조회하는 데 사용
  • QuerySet 유형 데이터가 반환됩니다.
    # app01/views.py
    from django.shortcuts import render,HttpResponse
    from app01 import models 
    
    def add_book(request):
        books = models.Book.objects.exclude(pk=5)
        print(books)
        print("//")
        books = models.Book.objects.exclude(publish='     ', price=300)
        print(books, type(books))  # QuerySet  ,   list。
        return HttpResponse("

    "
    )
  • get() 방법은 조건에 부합되는 것을 조회하는 데 사용되며, 모델 클래스로 돌아가는 대상이 조건에 부합되는 대상은 하나일 수 있으며, 선별 조건에 부합되는 대상이 하나를 초과하거나 하나도 없으면 오류가 발생합니다.
  • # app01/views.py
    from django.shortcuts import render,HttpResponse
    from app01 import models 
    
    def add_book(request):
        books = models.Book.objects.get(pk=5)
        books = models.Book.objects.get(pk=18)  #   ,         
        books = models.Book.objects.get(price=200)  #   ,           
        print(books, type(books))  #       
        return HttpResponse("

    "
    )
  • order_by () 방법은 검색 결과를 정렬하는 데 사용됩니다
  • QuerySet 유형 데이터가 반환됩니다.
    참고:
    1. 매개 변수의 필드 이름은 인덱스 2를 붙이고, 내림차순은 필드 앞에 기호를 붙인다 -
    # app01/views.py
    from django.shortcuts import render,HttpResponse
    from app01 import models 
    def add_book(request):
        books = models.Book.objects.order_by("price") #     ,         
        books = models.Book.objects.order_by("-price") #     ,        
        return HttpResponse("

    "
    )
  • count() 방법은 조회 데이터의 수량에 대한 반환 데이터가 정수
  • 입니다.
    # app01/views.py
    from django.shortcuts import render,HttpResponse
    from app01 import models 
    
    def add_book(request):
        books = models.Book.objects.count() #           
        books = models.Book.objects.filter(price=200).count() #            
        return HttpResponse("

    "
    )
  • exists() 방법은 조회의 결과를 판단하는 데 사용되며, 되돌아오는 데이터 유형은 부울이며, True가 있고False가 아니다
  • from django.shortcuts import render,HttpResponse
    from app01 import models
    
    def add_book(request):
        books = models.Book.objects.exists()
        #   ,          QuerySet    ,     
        books = models.Book.objects.count().exists()
        #   ,          QuerySet    ,        
        books = models.Book.objects.first().exists()  
        return HttpResponse("

    "
    )

    참고: 판단된 데이터 유형은QuerySet 유형 데이터일 수 있습니다.
  • distinct () 방법은 데이터를 다시 쓰는 데 사용되며,QuerySet 형식 데이터
  • 를 되돌려줍니다
    참고:
    1. 모델류의 대상을 무겁게 하는 것은 의미가 없다. 왜냐하면 모든 대상은 서로 다른 존재이기 때문이다.
    2,distinct () 는 일반적으로 연합values 또는valueslist 사용
    from django.shortcuts import render,HttpResponse
    from app01 import models
    
    def add_book(request):
        #            
        books = models.Book.objects.values_list("publish").distinct() #              ,                。
        books = models.Book.objects.distinct()
        return HttpResponse("

    "
    )

    filter () 방법은 이중 밑줄을 기반으로 하는 모호한 검색 (exclude 동일)
    from django.shortcuts import render,HttpResponse
    from app01 import models
    
    def add_book(request):
        #      200  300   
        books = models.Book.objects.filter(price__in=[200,300])
        return HttpResponse("

    "
    )
  • __lt는 번호보다 크고, = 번호 뒤에는 숫자(greater than)
  • #       200    
    books = models.Book.objects.filter(price__gt=200)
    
  • __gte는 보다 크고 =번호 뒷자리 숫자 (greater than or equal to)
  • #         200    
    books = models.Book.objects.filter(price__gte=200)
    
  • __lt 미만
  • #       300    
    books=models.Book.objects.filter(price__lt=300)
    
  • __lte가 작음
  • #         300    
    books=models.Book.objects.filter(price__lte=300)
    
  • __contains 포함
  • books = models.Book.objects.filter(title__contains=" ")
    
  • __icontains는 대소문자를 구분하지 않는 포함
  • books = models.Book.objects.filter(title__icontains="python") #       
    

    데이터 삭제
  • 방식1: 모듈 클래스 사용 .delete()
  • 반환값: 원조, 첫 번째 요소는 영향을 받은 줄 수
    books = models.Book.objects.filter(pk=8).first().delete()
    
  • 방법2:QuerySet .delete()
  • 사용
    반환값: 원조, 첫 번째 매개 변수는 영향을 받은 줄 수
    books = models.Book.objects.filter(pk__in=[1, 2]).delete()
    

    참고:
    1. Django가 데이터를 삭제할 때 SQL 제약 ON DELETE CASCADE의 행위를 모방한다. 즉, 한 대상을 삭제하면 그것과 관련된 두 개의 키 대상도 삭제한다.
    2. delete() 방법은QuerySet 데이터 형식의 방법이지만 Manager 자체에는 적용되지 않습니다.모든 데이터를 삭제하려면 all를 쓰지 않으면 안 됩니다.
    books=models.Book.objects.delete()  #   
    books=models.Book.objects.all().delete()   #     
    

    수정
  • 방식1
  •       .   =       
          .save()
    

    반환값:편집된 모델 클래스의 객체
    방법 2:QuerySet 클래스 데이터update( = )반환값:정수, 영향 받는 행 수
    from django.shortcuts import render,HttpResponse
    from app01 import models
    
    def add_book(request):
        books = models.Book.objects.filter(pk__in=[7, 8]).update(price=888)
        return HttpResponse(books)
    

    좋은 웹페이지 즐겨찾기