一. 数据的查询和编辑
假如现在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)