反向生成模型
增删改查
增加
直接增加
User.objects.create(username='测试用户',password='123',sex=1)
save保存添加
user=User(username='测试2')
user.password=hashlib.sha1('123'.encode('utf8')).hexdigest()
user.save()
批量插入
users=[]
for i in range(10):
user = User(username='测试2'+str(i),password=str(i))
users.append(user)
User.objects.bulk_create(users)
更新修改
单条更新
user=User.objects.get(pk=276)
if user:
user.username='大疆无人机'
user.save()
更新多条,不需要保存(不要对多表查询做更新)
users=User.objects.filter(uid__gt=277)
users.update(sex=2)
删除
物理删除
user=User.objects.get(pk=277)
user.delete()
逻辑删除
在数据库加入是否删除列
点击删除将该字段修改为1
查询时进行删选
查询
查询结果集
#all()
# users=User.objects.all()
#filter where子句 可以串联调用filter之后还可以filter
# users=User.objects.filter(sex=2).filter(username='wd111')
# 还可以写到一起
# users = User.objects.filter(sex=2,username='wd111')
#exclude 条件取反
# users=User.objects.exclude(sex=1)
#只取某一字段
# users=User.objects.all().values('username')
# for i in users:
# print(i)
# order 排序
# users=User.objects.all().order_by('-uid')
#获取指定列
users=User.objects.values('sex')
#distinct 去重
# users=User.objects.values('sex').distinct()
查询单条结果
# 查询单条记录,返回多条会抛异常
# user=User.objects.get(username='卢秋生')
# first 返回查询结果的第一条
# user=User.objects.filter(username='卢秋生').first()
#exits判断是否存在
user = User.objects.filter(username='卢秋生').exits()
查询结果集限制
# user=users[2] #取第几条记录
# user=users[1:3] #切片 1,2
#不能使用负下标,可以使用负索引eg:
# user=users[10:1:-2]
关系运算
关系运算 gt > ;gte >=; lt <; lte <=;
在范围之间 range
in 在范围内
判空 =None
正则 regex
like模糊查询 iregex(正则表达式)
# user=User.objects.filter(username_regex=r'^w') #以w开头
# user=User.objects.filter(username_regex=r'd') #包含d
统计
先过滤后统计
# num就是统计的别名
user=User.objects.filter.aggregate(num=Count('uid')) #根据uid进行统计
分组统计
#.values()分组,.annotate()分组统计函数与单独统计不同,可以有多个统计
user=User.objects.all().values('sex').annotate(Count('uid'))
多表关联查询
先创建多表关联视图创建出虚拟表