Django模型(增删改查)

1. 模型映射(对象关系映射ORM:objects relationship mapping)

Django模型(增删改查)_第1张图片
关系映射

Django模型(增删改查)_第2张图片
对象拥有默认属性objects

2. 增加

create()方法:

模型名.objects.create(字段1=值,指端2=值)
Student.objects.create(s_name='小明吧')

模型对象.save()

stu = Student()
stu.s_name = '日向雏田'
stu.s_gender = 1
stu.save()

3. 删除

delete()方法:

模型名.objects.filter(条件).delete()
Student.objects.filter(id=1).delete()

4. 更新

update()方法:

模型名.objects.filter(条件).update(字段1=值,字段2=值)
Student.objects.filter(id=3).update(s_name='漩涡鸣人') -->会返回一个更新状态 0 1

save()方法:模型对象.save() -- >推荐使用

stu = Student.objects.filter(id=3).first()
stu.s_name = '日向宁次'
x = stu.save()

注意:update()和save()的区别:是否更新使用auto_now约束条件的字段

5. 查询

5.1 filter()方法:

查询满足条件信息--模型名.objects.filter()条件

1.查询所有学生

stus = Student.objects.all()
for result in stus:
print(result.__dict__)

2.查询id为5的学生

Student.objects.filter(id=5).first()

3.查询第一个对象

stus = Student.objects.filter(s_gender=1)[0]

4.返回一个列表

注意:如果查询到多个对象,可以使用下标或者循环遍历--->结果是对象.

5.2 get()方法:

查询指定的条件

stu = Student.objects.get(id=10)
只能返回唯一的一个对象结果,条件必须存在

5.3 exclude()方法:

查询出不满足条件的信息:模型名.objects.exclude(条件)

stus = Student.objects.exclude(s_gender=0)

5.4 order_by()方法:

排序order_by 升序不添加任何,降序在字段前面添加一个负号'-'

1.升序排列

直接使用order_by(字段)默认升序排列

2.降序排列(添加负号)

stus = Student.objects.order_by('-s_age')

5.5 values()方法:

取出查询对象中的字段,存入到字典,比从对象中取出数据要快很多

1.取出对象中的某个字段

stus = Student.objects.all().values('s_name', 's_age')

2.查询到所有字段

stus = Student.objects.all().values()

5.6 exists():

判断结果是否存在,返回值是布尔类型
is_exists = Student.objects.filter(s_name='日向宁次').exists()

5.7 count()方法:

计算结果的条数

查询男的有多少人 count()作用和len(stus)相似

stus = Student.objects.filter(s_gender=1).count()

5.8 运算符

语法:字段__运算符

1. contains:包含

stus = Student.objects.filter(s_name__contains='日向').values('s_name', 's_age', 's_gender')

2. startswith:以什么开始

stus = Student.objects.filter(s_name__startswith='明')

3. endswith:以什么结束

stus = Student.objects.filter(s_name__endswith='明')

4. in:在某个范围之内

pk_in():pk和id一样
stus = Student.objects.filter(id__in=[1, 2, 3, 4, 5, 6])
stus = Student.objects.filter(pk__in=[1, 2, 3, 4, 5, 6])

5. gt,gte:大于,大于等于----lt,lte:小于,小于等于

stus = Student.objects.filter(s_age__gte=18, s_age__lt=20) # 且的操作

5.9 聚合

导包:
from django.db.models import Avg, Max, Count, Min, Sum
聚合函数 Avg, Max, Count, Min, Sum
age_avg = Student.objects.all().aggregate(Avg('s_age'))
print(age_avg, '平均年龄')
count = Student.objects.all().aggregate(Count('s_age'))
print(count, '数量')

5.10 Q(): 类似于sql中的where 条件

1. 与:

Q(条件1),Q(条件2)

Q(条件1)&Q(条件2)

stus = Student.objects.filter(s_age__gte=18, s_age__lt=20) # 且的操作

stus = Student.objects.filter(Q(s_age__gte=18) & Q(s_age__lt=20))

2. 或:

Q(条件1)|Q(条件2)

stus = Student.objects.filter(Q(s_age__lte=18) | Q(s_age__gt=20))

3. 非:

~Q(条件)

stus = Student.objects.filter(~Q(s_age__gte=18))

5.11 F():包裹表中字段

用于比较两个字段,可以使用+,-符号

模型名.objects.filter(physical__gt=F('math') + 10)

stus = Student.objects.filter(physical__gt=F('math') + 10)

5.12 数据库表的更新

模型类中的任意字段修改或者添加字段,都会产生表的变化,此时应该对模型进行迁移,保证与数据库中的表同步.

1. 使用 python manage.py makemigrations 得到迁移文件

2. 使用 python manage.py migrate 更新数据表

你可能感兴趣的:(Django模型(增删改查))