Django 면접문제 시리즈(2)-ORM 복잡한 조회 실현
9863 단어 django
Django
에 관심이 있다면 이 초상세한 과정을 보십시오.다음
ORM
모델이 있다고 가정합니다.from django.db import models
class Student(models.Model):
""" """
name = models.CharField(max_length=100)
gender = models.SmallIntegerField()
class Meta:
db_table = 'student'
class Course(models.Model):
""" """
name = models.CharField(max_length=100)
teacher = models.ForeignKey("Teacher",on_delete=models.SET_NULL,null=True)
class Meta:
db_table = 'course'
class Score(models.Model):
""" """
student = models.ForeignKey("Student",on_delete=models.CASCADE)
course = models.ForeignKey("Course",on_delete=models.CASCADE)
number = models.FloatField()
class Meta:
db_table = 'score'
class Teacher(models.Model):
""" """
name = models.CharField(max_length=100)
class Meta:
db_table = 'teacher'
이전에 배운 작업을 사용하여 다음 질의 작업을 수행합니다.
답안 참조:
rows = Student.objects.annotate(avg=Avg("score__number")).filter(avg__gte=60).values("id","avg")
for row in rows:
print(row)
rows = Student.objects.annotate(course_nums=Count("score__course"),total_score=Sum("score__number"))
.values("id","name","course_nums","total_score")
for row in rows:
print(row)
teacher_nums = Teacher.objects.filter(name__startswith=" ").count()
print(teacher_nums)
rows = Student.objects.exclude(score__course__teacher__name=" ").values('id','name')
for row in rows:
print(row)
rows = Student.objects.filter(score__course__in=[1,2]).distinct().values('id','name')
for row in rows:
print(row)
rows = Student.objects.annotate(nums=Count("score__course",filter=Q(score__course__teacher__name=' ')))
.filter(nums=Course.objects.filter(teacher__name=' ').count()).values('id','name')
for row in rows:
print(row)
students = Student.objects.exclude(score__number__gt=60)
for student in students:
print(student)
students = Student.objects.annotate(num=Count(F("score__course"))).filter(num__lt=Course.objects.count()).values('id','name')
for student in students:
print(student)
students = Student.objects.annotate(avg=Avg("score__number")).order_by("-avg").values('name','avg')
for student in students:
print(student)
courses = Course.objects.annotate(min=Min("score__number"),max=Max("score__number")).values("id",'name','min','max')
for course in courses:
print(course)
courses = Course.objects.annotate(avg=Avg("score__number")).order_by('avg').values('id','name','avg')
for course in courses:
print(course)
rows = Student.objects.aggregate(male_num=Count("gender",filter=Q(gender=1)),female_num=Count("gender",filter=Q(gender=2)))
print(rows)
rows = Score.objects.filter(course__teacher__name=' ').update(number=F("number")+5)
print(rows)
students = Student.objects.annotate(bad_count=Count("score__number",filter=Q(score__number__lt=60))).filter(bad_count__gte=2).values('id','name','bad_count')
for student in students:
print(student)
courses = Course.objects.annotate(student_nums=Count("score__student")).values('id','name','student_nums')
for course in courses:
print(course)
Django
에 관심이 있다면 이 초상세한 과정을 보십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Django의 질문 및 답변 웹사이트환영 친구, 이것은 우리의 새로운 블로그입니다. 이 블로그에서는 , 과 같은 Question-n-Answer 웹사이트를 만들고 있습니다. 이 웹사이트는 회원가입 및 로그인이 가능합니다. 로그인 후 사용자는 사용자의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.