嘻哈飞车族|Django之ORM表高级操作、增删改查、F/Q查询等( 三 )

# get()直接获取对象本身不推荐使用当查询条件不存在的时候直接报错res = models.Movie.objects.get(pk=1)print(res)10.first() 取第一个元素对象# first()数据对象取第一个元素对象res = models.Movie.objects.filter().first()print(res)11.last() 取最后一个元素对象# last()数据对象取最后一个元素对象res = models.Movie.objects.last()print(res)返回布尔值的方法有:12.exists()# exists()返回的是布尔值判断前面的对象是否有数据res = models.Movie.objects.filter(pk=1000).exists()# 不存在 , Fslseprint(res)res = models.Movie.objects.filter(pk=1).exists()# 存在 , True返回数字的方法有:13.count() 统计数据条数# 统计筛选之后数据的条数res = models.Movie.objects.count()print(res)四、神奇的双下线跨表查询在python中我们进行逻辑判断会用到>、<、=、or之类的符号 , 那么在Django进行models数据操作的时候 , 我们表示:双下划线
__gt: 大于__lt: 小于__gte: 大于等于__lte: 小于等于__in: 或__rang: 在...之间 , 顾头也顾尾__contains:模糊查询 , 区分大小写__icontains:模糊查询 , 不区分大小写__year: 查询年份__month: 查询月份案例:
# 神奇的双下划线查询# 1.查询价格大于200的电影res = models.Movie.objects.filter(price__gt=200)print(res)# 2.查询价格小于500的电影res = models.Movie.objects.filter(price__lt=500)print(res)# 3.查询价格大于等于876.23的电影res = models.Movie.objects.filter(price__gte=876.23)print(res.query)# 4.查询价格小于等于876.23的电影res = models.Movie.objects.filter(price__lte=500)print(res)# 5.查询价格是123 或666 或876res = models.Movie.objects.filter(price__in=[123,666,876])print(res)# 6.查询价格在200到900之间的电影顾头也顾尾res = models.Movie.objects.filter(price__range=(200,900))print(res)# 7.查询电影名中包含字母p的电影res = models.Movie.objects.filter(title__contains='p')# 默认是区分大小写res = models.Movie.objects.filter(title__icontains='p')# i忽略大小写# 8.查询2014年出版的电影res = models.Movie.objects.filter(publish_time__year=2014)# print(res)# 9.查询是1月份出版的电影res = models.Movie.objects.filter(publish_time__month=1)print(res)五、外键字段的增删改查在1.X版本中默认就是级联更新、级联删除
在2.X版本中需要自己手动设定
1.一对多1.增 直接写真实的表字段
# publish_id是外键字段models.Book.objects.create(title='三国演义',price=123.23,publish_id=2)2.增 通过对象
# Publish 是modles中有关联的表publish_obj = models.Publish.objects.get(pk=1)models.Book.objects.create(title='大话西游',price=66.66,publish=publish_obj)1.改 直接筛选出来 , 直接改
models.Book.objects.filter(pk=1).update(publish_id=3)2.改 通过对象
# 先获取出版社表id为4的对象publish_obj = models.Publish.objects.get(pk=4)models.Book.objects.filter(pk=1).update(publish=publish_obj)2.多对多1.绑定关系 addadd专门给第三张关系表添加数据括号内即可以传数字也可以传对象并且都支持传多个# 1.获取书籍对象book_obj = models.Book.objects.filter(pk=1).first()# 2.书籍对象点‘.’外键字段就已经跨入第三张表中了 。再用add添加绑定关系book_obj.authors.add(1,2,3)# 给书籍绑定一个主键为1 , 2 , 3的作者