django之model中数据库查询

一. 数据的查询和编辑

假如现在models.py中已经下面这个类,并且已经创建了相应的表

class Stu(models.Model):
    stu_id = models.CharField(max_length=20)  # 学号
    name = models.CharField(max_length=50, unique=True)  姓名
    password = models.CharField(max_length=50)  # 密码
    age = models.IntegerField()  # 年龄
    email = models.CharField(max_length=50)  # 邮箱
    details = models.TextField()  # 详细描述

 

filter()
# 返回指定条件的列表,若没有匹配的信息,那就返回一个空列表

1. 查询学号为32的学生信息

stu_info = Stu.objects.filter(stu_id='32').first()

2. 查询姓名为张三,年龄为18的学生

data = {
    "name": "张三",
    "age": "18"
}
stu_info = Stu.objects.filter(**data)

注意这儿传入的参数,因为是字典,所以要用**data表示,否则就会出错

 

exclude()
# 返回不符合条件的QuerySet,列表类型

1. 返回年龄不等于18的学生

stu_info = Stu.objeects.exclude(stu_id="18")

 

order_by()
# 串接到QuerySet之后,针对某一字段进行排序

1. 根据学生的年龄排序

stu_list = Stu.objects.all().order_by('age')  # 根据年龄从小到大排序

stu_list = Stu.obj.all().order_by('-age')  # 根据年龄从大到小排序

 

all()
# 返回所有QuerySet

stu_inf = Stu.objects.all()  # 获取表中所有的数据

 

get()
# 获取指定符合条件的唯一元素,如果找不到或者有一个以上的符合条件,都会产生exception

stu_info = Stu.objects.get(age="18")  # 得到第一条数据

这个方法和filter()有一个明显的区别,就是这个get()方法获取的值有且只有一个。也就是说,如果数据库中符合条件的值没有或者超过1个,那么都会报错。所以建议使用filter()

first()/last()
# 获取第一个/最后一个元素

stu_info = Stu.objects.filter(age="18").first()

stu_info = Stu.objects.filter(age="18").last()

 

aggregate()
# 可以用来计算数据项的聚合函数

 

exists()
# 用来检查是否存在某指令条件的记录,通常附加在filter()后面

 

update()
# 更新数据库的内容

Stu.objects.filter(name="李四").update(age="17")  # 将李四的年龄改为17

 

delete()
# 删除数据库中的某项记录

Stu.objects.filter(id=1).delete()  # 将id为1的学生信息删除

 

create()
# 创建记录

data = {
    "name": "周某人",
    "age": "18",
    "email": "xxxxxxx"
}
Stu.objects.create(**data)  # 创建信息
# 相当于SQL语句中的如下语句
INSERT INTO stu (name, age, email) VALUES ("周某人", "18", "xxxxxxx");

 

iexact()
# 不区分大小写的条件查询

 

contains()/icontains()
# 设置条件为含有某一字符串就符合,如SQL语句中的LIKE和ILIKE

 

in()
# 提供一个列表,只要符合列表中的任何一个值均可

 

gt/gte/lt/lte
# 大于/大于等于/小于/小于等于

stu_info = Stu.objects.filter(id__gt=2)  # 找出id大于2的所有记录
注:这是django自带的方法,不能写id>2, 而是用id__gt=2。即字段+双下划线+大小+等于号

例如找出大于等于5的所有记录
stu_info = Stu.objects.filter(id__gte=5)


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大骨熬汤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值