ORM操作-单表操作

已有数据模型

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逆序,操作的是querysetqueryset
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')
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值