https://blog.csdn.net/weixin_40744265/article/details/88316555
https://www.cnblogs.com/liwenzhou/p/8660826.html
1.基础的增删改查
add delete update filter/get
2.一般:
User.objects.filter(id__in=[1,2,5]) #相当于 User.objects.in_bulk([1,2,5])
models.Tb1.objects.filter(id__lt=10, id__gt=1) # 获取id大于1 且 小于10的值
models.Tb1.objects.filter(id__range=[1, 3]) # id范围是1到3的,等价于SQL的bettwen and
类似的还有:startswith,istartswith, endswith, iendswith
date字段还可以:
models.Class.objects.filter(first_day__year=2017)
3.related_name、related_query_name
4.select_related、prefetch_related
tt = Book.objects.all().select_related('publish','guige')
for t in tt:
print(t.title,t.guige.name,t.publish.name)
建立外键时,提高连表操作效率(需在建立model时,设置)
https://www.cnblogs.com/tuifeideyouran/p/4232028.html
5.only、defer
1.支取表中id/name/age列,通过此方法查询的结果还是queryset,并且queryset内部为对象
models.User.objects.all().only("id", "name", "age")
扫描二维码关注公众号,回复:
5899019 查看本文章
返回对象[obj,],对象可以通过.属性调用only未标记的属性值
models.User.objacts.values("id","username")
返回对象[(id,username)]
2. 不取表中的name列
models.User.objects.all().defer("name")
6.extra
6.1select
tt = Book.objects.all().extra(
select={"n":"select count(1) from blog_book"},
)
for t in tt:
print(t.title,t.n)
#python初级 3
#php 3
#c++ 3
tt = Book.objects.all().extra(
select={"n":"select count(1) from blog_book where id < %s"},
select_params=[3]
)
for t in tt:
print(t.title,t.n)
#
python初级 2
php 2
c++ 2
6.2where
6.3 order_by
tt = Book.objects.all().extra(
where=["id=1 or id = 2",],
order_by=["-id"]
)
for t in tt:
print(t.title)
#
php
python初级
7.distinct
8.using
settings中配置多个数据库,确定在那个数据库操作
#确定在那个数据库查询
Book.objects.all().using('mysite_19')
9.dates、datetimes
tt = Book.objects.datetimes("add_time","hour",order="DESC",tzinfo=("Asia/Shanghai"))
print(tt.query)
for t in tt:
print(t)
10aggragate
tt = Book.objects.aggregate(k=Count("id"),m=Count("publish",distinct=True))
print(tt)
11.bulk_create批量增加
book = [
Book(title="老人与海",publish_id=3),
Book(title="背影",publish_id=1),
]
Book.objects.bulk_create(book,10)
12get_or_create、update_or_create
分组聚合、F、Q、原生sql语句