Models进阶
Django--Models进阶
Queryset特点
(1)支持切片操作(不支持负数,就是不能倒着数) bookList=Book.objects.all() print(bookList[1:]) (2)支持遍历 for book in bookList: print(book.title) (3)属于惰性查询(要有数据产生时才会去数据库找) bookList=Book.objects.all() for book in bookList: print(book) print(bookList[1]) if bookList: print("hello") (4)缓存机制 将查询的数据放入一个变量,下次用到该变量时可以直接拿到数据,
不会再去数据库拿数据数据库数据发生变化时,要更新变量的值
bookList=Book.objects.all()
for book in bookList:
print(book)
Book.objects.create(title="linux",price=20,publish_id=1,publishDate="2012-12-12")
for book in bookList:
print(book)
==========================
for book in Book.objects.all():
print(book)
for book in Book.objects.all():
print(book)
(5)优化QuerySet的缓存
bookList=Book.objects.all()
- exists优化,只检测数据库中是否有数据 if bookList.exists():
print("有记录") - 将QuerySet对象变成迭代器对象
book_obj=bookList.iterator()
for book in book_obj:
print(book.title) #数据取完,程序终止
for book in book_obj:
print(book.title) #拿不到数据
中介模型
就是两个表为多对多关系时,需创建第三张表,有时第三张表需要其它详细信息,所以需要自己创建,
但为了查询时能用到多对多的字段,需在剩下的两张表中任意一个表建立ManyToManyField字段时,需
加through参数等于第三张表名,例如:
from django.db import models # Create your models here. class Class_c(models.Model): name=models.CharField(max_length=10) class Course(models.Model): name = models.CharField(max_length=10) class Student(models.Model): name = models.CharField(max_length=10) age=models.IntegerField class_id=models.ForeignKey("Class_c") classes=models.ManyToManyField("Course",through=Score) class Score(models.Model): course_id=models.ForeignKey("Course") student_id=models.ForeignKey("Student") score=models.IntegerField()

浙公网安备 33010602011771号