上一章提到,QuerySet与惰性机制:
QuerySet特点:
<1> 可迭代的
<2> 可切片
<3> 惰性计算和缓存机制
① 增加操作
def orm(request):
# orm 添加一条记录的方法
# 单表
# 1、表.objects.create()
models.Publish.objects.create(name='xxx出版社',addr="湖南.长沙")
models.Classify.objects.create(category='IT')
models.Author.objects.create(name='云团',sex='男',age=18,university='xxx大学')
# 2、类实例化:obj=类(属性=XX) obj.save()
obj=models.Author(name='团豆豆',age=18,sex='女',university='xxx学院')
obj.save()
# 一对多
# 1、表.objects.create()
models.Book.objects.create(title='数据挖掘',price=200,date=2019,classify_id=6, publish_id=6)
# 2、类实例化:obj=类(属性=X,外键=obj)obj.save()
classify_obj=models.Classify.objects.get(category='IT')
publish_obj=models.Publish.objects.get(name='xxx出版社')
# 注意以上获取得是和 book对象 向关联的(外键)的对象
book_obj=models.Book(title='数据分析',price=234,date=2019,classify=classify_obj,publish=publish_obj)
book_obj.save()
# 多对多
# 如果两表之间存在双向1对N关系,就无法使用外键来描述其关系了;
# 只能使用多对多的方式,新增第三张表关系描述表;
book=models.Book.objects.get(title='数据存储')
author1=models.Author.objects.get(name='云团')
author2=models.Author.objects.get(name='小白')
book.author.add(author1,author2)
# 书籍和作者是多对多关系,
# 切记:如果两表之间存在多对多关系,例如书籍相关的所有作者对象集合,作者也关联的所有书籍对象集合
book=models.Book.objects.get(title='大数据分析')
author=models.Author.objects.get(name='云团')
author2 = models.Author.objects.get(name='大白')
book.author.add(author,author2)
#add() 添加
#clear() 清空
#remove() 删除某个对象
return HttpResponse('OK')
② 更改操作
# 修改方式1 update()
models.Book.objects.filter(id=1).update(price=3)
# 修改方式2 obj.save()
book_obj=models.Book.objects.get(id=1)
book_obj.price=5
book_obj.save()
③ 查询操作
def ormquery(request):
#------query_set对象集合 [对象1、对象2、.... ]
books=models.Book.objects.all()
books=models.Book.objects.filter(id__gt=2,price__lt=100)
#---------单个对象,没有找到会报错
book=models.Book.objects.get(title__endswith='分析')
book1 = models.Book.objects.filter(title__endswith='挖掘').first()
book2 = models.Book.objects.filter(title__icontains='数据').last()
#-------query_set字典集合 [{一条记录},{一条记录} ]
books=models.Book.objects.values('title','price',
'publish__name',
'date',
#切记 正向连表:外键字段__对应表字段
'classify__category',
#反向连表: 小写表名__对应表字段
'author__name',
#区别:正向 外键字段__,反向 小写表名__
'author__sex',
'author__age',
'author__university')
books=models.Book.objects.values('title','publish__name').distinct()
#exclude 按条件排除。。。
#distinct()去重, exits()查看数据是否存在? 返回 true 和false
title =models.Book.objects.filter(title__icontains='大数据').
return HttpResponse('OK')