添加记录:
添加记录方式1:
Book.objects.create(title="三体",....)
添加记录方式2:
book=Book(title="三体",....)
book.save()
写在最前面: 按表名查询时候,表名要全小写,驼峰体也全部小写。
1 查询记录:
查询API:
1 Book.objects.all() # querysey [obj,....]
2 Book.objects.filter(title="三体") # querysey [obj,....]
queryset.filter() # 返回值 queryset
3 Book.objects.exclude(title="三体") # querysey [obj,....] 排除,不包括
4 Book.objects.all().first() # obj
5 Book.objects.all().last() # obj
6 Book.objects.all()[0] # obj
7 Book.objects.get(title="三体") # obj
8 queryset.order_by() # 返回值 queryset
9 queryset.reverse() # 返回值 queryset
10 queryset.count() # 返回值 int (queryset的终止函数)
Book.objects.all().filter(price__gt=100).order_by("pirce").count()
11 queryset.exist() # 返回值是布尔值
12 queryset.values("price") # 返回值 queryset [{"price":123},{"price":124},{"price":13}]
13 queryset.valueslist("price") # 返回值 queryset [(123,),(124,),(345,)]
14 queryset.distinct("price") # 返回值 queryset 去重复
2 模糊查询 __
条件选取querySet的时候,filter表示=,exclude表示!=。
querySet.distinct() 去重复
__exact 精确等于 like 'aaa'
__iexact 精确等于 忽略大小写 ilike 'aaa'
__contains 包含 like '%aaa%'
__icontains 包含 忽略大小写 ilike '%aaa%',但是对于sqlite来说,contains的作用效果等同于icontains。
__gt 大于
__gte 大于等于
__lt 小于
__lte 小于等于
__in 存在于一个list范围内
__startswith 以...开头
__istartswith 以...开头 忽略大小写
__endswith 以...结尾
__iendswith 以...结尾,忽略大小写
__range 在...范围内
__year 日期字段的年份
__month 日期字段的月份
__day 日期字段的日
__isnull=True/False
Book.objects.filter(price__in=[100,200,300])
Book.objects.filter(price__gt=100)
Book.objects.filter(price__lt=100)
Book.objects.filter(price__range=[100,200])
Book.objects.filter(title__contains="x")
Book.objects.filter(title__icontains="x")
Book.objects.filter(title__startswith="py")
Book.objects.filter(pub_date__year=2012)
3 跨表查询
1 基于对象 查询,一步一个脚印的查询
正向查询:关联属性(字段)创建在表A中,所以表A的对象找关联表B的数据,正向查询
author_obj
=
Author.objects.get(name
=
"egon"
)
book_list
=
author_obj.book_set.
all
()
#与egon作者相关的所有书籍
2 基于(表连接)查询
基于字段查询
基于双下划线查询 双下划线 即 连接起来两个表 (也可以连续跨表)
1 练习: 查询苹果出版社出版过的所有书籍的名字与价格(一对多)
queryResult=Book.objects.filter(publish__name="苹果出版社").values_list("title","price")
queryResult=Publish.objects.filter(name="苹果出版社").values_list("book__title","book__price")
publish__name 表示本表字段publish关联的表(to=‘Publish’)中的字段name
book 表示与Publish表关联的表Book
2 练习: 查询alex出过的所有书籍的名字(多对多)
queryResult=Book.objects.filter(authors__name="yuan").values_list("title")
queryResult=Author.objects.filter(name="yuan").values_list("book__title","book__price")
authors__name 表示 authors 指向的表中的name字段
book 表示的与Author表 关联的Book表