django 데이터베이스 조작
q = Question(question_text="what's your name?",pub_date=date)
q.save()
Question.objects.create(question_text="what's your name?",pub_date=date)
조회 작업
조회 집합
필터 방법을 호출할 때,django는 조회 집합을 되돌려줍니다. 조회 및 두 가지 특성이 있습니다
print([e.headline for e in Entry.objects.all()])
print([e.pub_date for e in Entry.objects.all()])
. 정확한 방법은 조회 집합을 저장하는 것이다. 아래queryset = Entry.objects.all()
print([p.headline for p in queryset]) # Evaluate the query set.
print([p.pub_date for p in queryset]) # Re-use the cache from the evaluation.
queryset = Entry.objects.all() print(queryset[5]) # Queries the database print(queryset[5]) # Queries the database again
, , :
queryset = Entry.objects.all() [entry for entry in queryset] # Queries the database print(queryset[5]) # Uses cache print(queryset[5]) # Uses cache
다음은 전체 쿼리 세트가 평가되고 캐시가 채워지는 다른 작업의 예입니다.
[entry for entry in queryset] bool(queryset) entry in queryset list(queryset)
all(),count(),get()
필터 필터 exclude
조회 집합 및 관리자에서 필터를 호출할 수 있습니다
날짜의 일부 값에 따라 조회하다
# year month day hour minute second
User.objects.filter(birthday__year=2010)
필드 쿼리
기본 키워드 찾기 매개 변수는 폼field 을 사용합니다lookuptype=value
lookuptype
instruction
mean
lte
<=
less then or equal
gte
>=
greater then or equal
id,pk
id
id
exact
=
완전히 같다
iexact
=
대소문자 구분 없음
contains
포함
포함, sql에서like "xx%"
startswith, endswith
처음
istartswith, iendswith, 대소문자를 구분하지 않는 버전
in
범위 조회
테이블 간 조회(관계 간 조회)
공식 문서 Django는 검색 중인 관계를 추적하는 강력하고 직관적인 방법을 제공합니다. JOIN은 백엔드에서 자동으로 SQL을 처리합니다.관계를 뛰어넘으려면 모형과 관련된 필드의 이름을 사용하고 필요한 필드에 도달할 때까지 두 밑줄로 구분해야 한다.
Order.objects.filter(user__name='Lisa')
#여러 관계식에 걸쳐 필터링을 수행하고 중간 모델 중 하나가 필터 기준을 충족하는 값이 없으면 Django는 빈 값(모든 값이 NULL)으로 간주하지만 유효한 객체가 있습니다.이 모든 것은 어떤 잘못도 일으키지 않는다는 것을 의미한다.예를 들어, 이 필터에서 다음을 수행합니다.
Blog.objects.filter(entry__headline__contains='Lennon')
(관련 Author 모델이 있는 경우) author가 항목과 연결되어 있지 않으면, 부족한 것으로 인해 오류가 발생하는 author가 아니라name 부가가치가 없는 것으로 간주합니다.보통 이것이 바로 네가 일으키고 싶은 일이다.유일하게 곤혹스러울 수 있는 상황은 당신이 그것을 사용하고 있다는 것이다.따라서
Blog.objects.filter(entry__authors__name__isnull=True)
Blog에 빈 대상name에 있는 author와 빈 author가 있는 entry를 되돌려줍니다.만약 뒤에 있는 대상을 원하지 않는다면, 당신은 다음과 같이 쓸 수 있습니다.
Blog.objects.filter(entry__authors__isnull=False, entry__authors__name__isnull=True)
F 객체
지금까지 제시한 예에서 우리는 모델 필드의 값과 상수를 비교하는 데 사용할 필터를 구성했다.그러나 모델 필드의 값을 같은 모델의 다른 필드와 비교하려면 어떻게 해야 합니까?
Django는 이러한 비교를 허용합니다.조회에서 모델 필드를 인용하는 실례입니다.그리고 검색 필터에서 이 인용을 사용하여 같은 모델의 실례에 있는 두 필드의 값을 비교할 수 있습니다.F expressionsF()
from django.db.models import F # F
#
Question.objects.filter(comments__gt=F('clicks'))
Q 개체
Filter 필터를 할 때, 조건은 and에 따라 연결되며, or를 사용해야 할 경우,django가 제공하는 Q 대상을 사용해야 합니다.아래와 같다
Q(question__startswith='Who') | Q(question__startswith='What')
SQL WHERE :
WHERE question LIKE 'Who%' OR question LIKE 'What%'
~Q(pub date year=2005) #은 키워드 매개 변수와 Q 대상을 동시에 사용하지 않으면 Q 대상을 검색 문장 앞에 두어야 한다는 뜻입니다. 이 문장은 이상을 던집니다. SyntaxError:positional argument follows keyword argument Question.objects.filter(question text startswith="w", Q(id=1)|Q(id=4)) 올바른 쓰기 방법은:Question입니다.objects.filter(Q(id=1)|Q(id=4),question_text__startswith=“w”)
일대다 조회
한 측에서 존재 관계의 다방면을 조회하다
Question.objects.get(pk=1).choice_set.all()
여러모로 외부 키를 정의할 때,related 를 지정하면name, related질의
Question.objects.get(pk=1).choices.all()
다방면으로 한 측을 조회하면 직접 이 속성을 호출하면 된다
Choice.objects.get(pk=1).question
QuerySet 위의 객체 읽어들이기에 정의된 방법 외에도 관련 객체 세트를 처리하는 데 사용되는 다른 방법이 있습니다.모든 개요는 다음과 같습니다. 완전한 세부 사항은 관련 대상의 참고에서 찾을 수 있습니다.ForeignKey Manager
dd(obj1,obj2,...)는 특정한 모델 대상을 관련 대상 집합에 추가합니다.create(*kwargs)에서 새 대상을 만들고 저장하여 관련 대상에 넣습니다.새로 만든 객체를 반환합니다.remove(obj1,obj2,...) 관련 대상에서 지정한 모델 대상을 집중적으로 삭제합니다.clear () 는 관련 대상에서 모든 대상을 집중적으로 삭제합니다.관련 객체 세트를 set(objs)으로 대체합니다.
취합
# 모든 책의 평균가격 from django.db.models import Avg Book.objects.all().aggregate('price') # 모든 책의 최고 가격 from django.db.models import Max Book.objects.all().aggregate(Max('price')#최고가격과 평균가격의 차치Book.objects.all().aggregate(Max(‘price’,output_field=FloatField())-Avg(‘price’))
annotate 관계 조회에 사용할 집합
비교 대상
두 모델 객체의 == 비교, 기본 키 비교
some_entry == other_entry some_entry.id == other_entry.id
객체 삭제
object.delect() queryset.delect() # 쿼리 세트 호출 delete, 대량 삭제
업데이트
obj.name = “xxx” obj.save() or obj.update(name=“xxx”)
ForeignKey 및 ManyToManyField 필드 저장
#
from blog.models import Blog, Entry
>>> entry = Entry.objects.get(pk=1)
cheese_blog = Blog.objects.get(name="Cheddar Talk")
entry.blog = cheese_blog
entry.save()
# , add()
john = Author.objects.create(name="John")
paul = Author.objects.create(name="Paul")
george = Author.objects.create(name="George")
ringo = Author.objects.create(name="Ringo")
entry.authors.add(john, paul, george, ringo)
실무, 일, 총무
공식 문서
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Django & Stripe - 오픈 소스 미니 전자 상거래안녕하세요! 이 문서에서는 Stripe를 결제 프로세서로 사용하고 Django를 백엔드로 사용하는 오픈 소스 프로젝트를 소개합니다. 전자상거래 섹션 콘텐츠는 JSON에서 로드되며 정보는 간단한 라우팅 논리로 관리됩니...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.