已有数据模型
class User(models.Model):
# id = models.AutoField(primary_key=True) # 主键
name = models.CharField(max_length=32, verbose_name="姓名") # 名字,字符串
age = models.IntegerField(verbose_name="年龄") # 年龄 int
gender = models.CharField(max_length=4, verbose_name="性别") # 性别 int
方法 | 注释,语法 | 返回值 |
---|---|---|
save | 先实例化对象user,user.属性 = 值… user.save()添加数据 | – |
create | 先定义一个操作字典,包含属性和对应的值,调用create方法添加数据 | – |
all | 查询所有数据,可以通过下标获取对象,然后在(.属性)获取对象属性的值 | queryset 列表对象 |
get | 获取符合条件的数据,有且只有一条,否在报错,通常配合id 使用 | 对象 |
filter | 类似sql中的where,过滤的作用,返回所有符合条件的数据 | queryset |
first | 操作的是queryset ,返回第一条数据 | 对象 |
exclude | 返回不符合条件的数据 | queryset |
order_by | 对拿到的数据排序,默认顺序是正序,order_by(’-id’)是对id逆序,操作的是queryset | queryset |
values | 返回的是一个类 queryset 里面的数据字典类型 | queryset类字典类型 |
exists | 判断数据是否存在 | 布尔值 |
count | 统计符合条件的数据条数 | 数字 |
切片 [ ] | 对拿到的数据二次操作 | queryset列表对象 |
update | 是queryset 的一个方法,如果是对象不能使用update | – |
delete | 删除数据,是queryset的一个方法,对象不能使用delete | – |
双下划线语法:一般配合filter 使用
id__lt | 小于 |
---|---|
id__gt | 大于 |
id__gte | 大于等于 |
id__in=[1,2,3] | id 在列表里的取值 |
contains | 包含指定字符,大小写敏感 |
icontsins | 包含指定字符,大小写不敏感 |
startswith | 指定字符开头,大小写敏感 |
endswith | 指定字符结尾,大小写敏感 |
iendswith | 指定字符结尾,大小写不敏感 |
id__range(1,3) | 在指定的范围,是一个前闭合,后闭合的区间,包含头和尾 |
增加数据
save 方法
- 方法1:先实例化对象user,在实例化的时候添加对象的属性,之后再用user对象调用save方法实现添加数据
def adduser(request):
user = User(name='Ian',age=11,gender='nan')
user.save()
- 方法2:实例化对象user,一个一个的对象添加属性,之后再调用save方法实现添加数据
def adduser(request):
user.User()
user.name = 'ian'
user.age = 12
user.gender = 'nv'
user.save()
create 方法
- create是一个方法
def adduser(request):
# 方式1
User.objects.create(name='Damon',age='13',gender='nan')
# 方式2
params = dict(name='Alaric',age=14,gender='nan')
User.objects.create(**params)
ps:** 出现在形参中,是关键字参数
** 出现在实参中是解包 的意思
在这里的意思是:传入的params 是一个字典参数,将这个字典的键值对拆解出来,把拆解出来的参数当参数用
给表再添加几条数据
def adduser(request):
user = User(name='Nina',age=15,gender='nv')
user.save()
User.objects.create(name='aaa',age=16,gender='nan')
User.objects.create(name='aaa',age=26,gender='nv')
User.objects.create(name='aaa',age=36,gender='nan')
User.objects.create(name='bbb',age=17,gender='nv')
params = dict(name='ccc',age=18,gender='nv')
User.objects.create(**params)
查询数据
all 方法
- 查询所有的数据
- 返回值:queryset 类列表对象
- 要获取某一条数据用下标,或者遍历获取每一个
- 获取某个对象的属性通过 “.属性”
def getuser(request):
data = User.objects.all()
# 打印的是全部数据,是一个类列表对象
print(data)
# 打印的是这个列表对象中下标为0的数据
print(data[0])
# 打印的是列表对象中下标为0的数据的name属性的值
print(data[0].name)
# for循环可以遍历获取每一条数据
for i in data:
print(i) # i是个对象
print(i[0].name)
get 方法
- 返回符合条件的数据,且返回结果有且只有一条数据,否则报错
- 返回值:对象
- get 通常用 id 作为条件
def getuser(request):
# 拿到id为1的数据
data = User.objects.get(id=1)
print(data)
# 拿到name为Alaric的数据
data = User.objects.get(name='Alaric')
print(data)
filter 方法
- 类似于sql中where,过滤的作用
- 返回值:queryset
def getuser(request):
data = User.objects.filter(name='Ian')
# 打印name为Ian的数据
print(data)
# filter拿到的是一个类列表对象,可以用for遍历
for i in data:
print(i.id)
# 当有多个条件的时候,条件之间是and关系,需要同时满足
data = User.objects.filter(name='Ian',age=11)
print(data)
first 方法
- 返回第一条数据
- 返回值:对象
def getuser(request):
# 通过filter获取的name为aaa的有三条数据,first获取第一条数据
data = User.objects.filter(name='aaa').first()
print(data)
last 方法
- 返回最后一条数据
- 返回值:对象
def getuser(request):
# 通过filter获取的name为aaa的有三条数据,last获取第一条数据
data = User.objects.filter(name='aaa').last()
print(data)
exclude 方法
- 返回不符合条件的数据(不包含条件属性的其他所有数据)
- 返回值:queryset
def getuesr(request):
# 查询所有gender为nan的所有数据(查询所有不是nv的数据)
data = User.objects.exclude(gender='nv')
print(data)
order_by
- 排序
- 返回值:queryset
def getuser(request):
# 升序
data = User.objects.order_by('id','age')
print(data)
# 逆序
data = User.objects.order_by('-id')
print(data)
reverse
- 对查询的结果反向排序,多个排序条件的话,前面的先排序
- 返回值:queryest
data = User.objects.all().order_by('id').reverse()
print(data)
values
- 返回一个类 queryset 里面的数据字典类型
- 可以根据key(类属性)拿到对应的值
data = User.objects.all().values() # 得到一个queryset类字典类型
data = User.objects.all().values('name','age') # 根据属性关键字,拿到对应的属性的值
print(data)
exists
- 判断这条数据是否在数据库存在
- 返回值:布尔值 True,存在 False,不存在
flag = User.objects.filter(name='Ian').exists()
print(flag)
count
- 统计符合条件的数据条数
- 返回值:数字
num = User.objects.filter(name='damon').count()
print(num)
切片 [ ]
- 对拿到的数据进行二次处理
- 返回值:是对queryset 对象进行处理,所以拿到的是对象
data = User.objects.all()[1:3]
print(data)
修改数据
save方法
- 需要先查询数据,拿到数据实例对象
- 然后在修改实例对象的属性的值
- save 方法保存数据
user = User.objects.filter(id=2).first()
user.age = 222
user.save()
update 方法
- 是 queryset 的方法,操作的不能是对象
User.objects.filter(id=4).update(age=555)
User.objects.filter(name='aaa').update(age=44)
删除数据
- 是queryset 的方法,操作的不能是对象
User.objects.filter(id=6).delete()
User.objects.filter(name='aaa').delete()
双下划线的方法 “__”
# 取id 小于3的数据
data = User.objects.filter(id__lt=3).values('name')
# 取id 大于3 的数据
data = User.objects.filter(id__gt=3).values('name')
# 取id 大于等于3 的数据
data = User.objects.filter(id__gte=3).values('name')
# 取id 为1,2,3的数据
data = User.objects.filter(id__in=[1,2,3]).values('name')
# 取包含指定字符的数据,大小写敏感
data = User.objects.filter(name__contains='I').values('name')
# 取包含指定字符的数据,大小写不敏感
data = User.objects.filter(name__icontains='I').values('name')
# 指定字符开头的数据,大小写敏感
data = User.objects.filter(name__startswith='I').values('name')
# 指定字符开头的数据,大小写不敏感
data = User.objects.filter(name__istartswith='I').values('name')
# 指定字符结束的数据,大小写敏感
data = User.objects.filter(name__endswith='I').values('name')
# 取id 范围在(1,3)的数据,是个前闭合后闭合的范围区间
data = User.objects.filter(id__range=(1,3)).values('name')