第7节-----Django模型使用二
一.常用查询
1.常用查询方法如下
mo_xin/urls.py
from mo_xin.models import User from django.http import HttpResponse def search_ways(request): # 获取所有的数据 rs = User.objects.all() print(rs) # 获取第一条数据 rs = User.objects.first() print(rs) # 获取最后一条数据 rs = User.objects.last() print(rs) # 获取过滤器过滤后的数据,返回QuerySet rs = User.objects.filter(age=2020) print(rs) # 获取除(给的参数)外的数据exclude rs = User.objects.exclude(age=2020) print(rs) # 获取一个数据,若获取的有多个则会报错 rs = User.objects.get(name='我爱中国22') print(rs) # 对查询结果排序,单项排序 rs = User.objects.all().order_by('age') print(rs) # 对获取的结果多项排序 rs = User.objects.all().order_by('age','u_id') print(rs) # 对获取的结果反向排序 rs = User.objects.all().order_by('-age') print(rs) # 将查询获取的QuerySet结果转化为字典 rs = User.objects.all().values() print(rs) # 统计获取的数据总数 rs = User.objects.all().count() print(rs) return HttpResponse("常用查询方法就这些")
mo_xin/urls.py
from django.urls import path from mo_xin import views urlpatterns = [ path('index5/', views.search_ways), ]
数据库中表的值
运行结果


2.常用的查询条件
mo_xin/urls.py
from django.urls import path from mo_xin import views urlpatterns = [ path('index6/', views.search_condition), ]
mo_xin/views.py
from mo_xin.models import User from django.http import HttpResponse def search_condition(request): # exact 相当于等于(不能忽略大小写) rs = User.objects.filter(name__exact='i love china 1') print('exact 相当于等于(不能忽略大小写)', rs) # iexact 相当于等于(忽略大小写) rs = User.objects.filter(name__iexact='i love china 1') print('exact 相当于等于(忽略大小写)', rs) # contains 包含(不能忽略大小写) rs = User.objects.filter(name__contains='i love ') print('contains 包含(不能忽略大小写)', rs) # i contains 包含(忽略大小写) rs = User.objects.filter(name__icontains='i love ') print('contains 包含(忽略大小写)', rs) # start with 以什么开始 rs = User.objects.filter(name__startswith='I') print(' start with 以什么开始(不能忽略大小写)', rs) # i start with 以什么开始 rs = User.objects.filter(name__istartswith='I') print(' i start with 以什么开始(忽略大小写)', rs) # end with以什么结尾 rs = User.objects.filter(name__endswith='1') print('end with 以什么结尾(不能忽略大小写)', rs) # i end with以什么结尾 rs = User.objects.filter(name__iendswith='1') print('i end with 以什么结尾(忽略大小写)', rs) # gt 大于 rs = User.objects.filter(age__gt=1995) print('gt大于', rs) # gte 大于等于 rs = User.objects.filter(age__gte=1995) print('gt大于等于', rs) # lt 小于 rs = User.objects.filter(age__lt=1995) print('lt小于', rs) # lte 小于等于 rs = User.objects.filter(age__lte=1995) print('lte小于等于', rs) # in 在什么中的 rs = User.objects.filter(age__in=[1995, 1996, 1997]) print('in 在什么中的', rs) # range 在什么区间的 rs = User.objects.filter(age__range=(1994, 1996)) print("range 在什么区间内的", rs) # isnull判断是否为空 rs = User.objects.filter(age__isnull=True) print("isnull 判断为空", rs) return HttpResponse("这些就是常用的查询条件")
数据库表中的数据

运行结果


注意:运行结果中exact与iexact中的结果一样的。。。。。。。。。。。。。。。。。说明了什么?????
二.模型常用的字段类型及参数
1.常用模型类的属性类型(即字段类型)
1. IntegerField : 整型,映射到数据库中的int类型。 2. CharField: 字符类型,映射到数据库中的varchar类型,通过max_length指定最大长度。 3. TextField: 文本类型,映射到数据库中的text类型。 4. BooleanField: 布尔类型,映射到数据库中的tinyint类型,在使用的时候,传递True/False进去。如果要可以为空,则用NullBooleanField。 5. DateField: 日期类型,没有时间。映射到数据库中是date类型, 在使用的时候,可以设置DateField.auto_now每次保存对象时,自动设置该字段为当前时间。设置DateField.auto_now_add当对象第一次被创建时自动设置当前时间。 6. DateTimeField: 日期时间类型。映射到数据库中的是datetime类型, 在使用的时候,传递datetime.datetime()进去。
2.Field常用参数
primary_key: 指定是否为主键。
unique: 指定是否唯一。
null: 指定是否为空,默认为False。
blank: 等于True时form表单验证时可以为空,默认为False。
default: 设置默认值。
DateField.auto_now: 每次修改都会将当前时间更新进去,只有调用Model.save()方法才会调用,QuerySet.update方法将不会调用。这个参数只是Date和DateTime以及Time类才有的。
DateField.auto_now_add: 第一次添加进去,都会将当前时间设置进去。以后修改,不会修改这个值
For Example
mo_xin/urls.py
from django.urls import path from mo_xin import views urlpatterns = [ path('index7/', views.add_test), path('index8/', views.search_test), ]
mo_xin/views.py
from django.db import models def add_test(request): Test.objects.create(name='华五1', age=22, note="来自四川资阳") Test.objects.create(name='华五2',age=23,note="来自四川资阳") return HttpResponse('插入数据成功!!!') # 查询数据 def search_test(request): # 查询所有记录对象 rs = User.objects.all() print(rs) return HttpResponse('查询数据成功!!!')
mo_xin/models.py
from django.db import models class Test(models.Model): name = models.CharField(max_length=30, unique=True) age = models.IntegerField() note = models.TextField() create_time = models.DateField(auto_now=True) update_time = models.DateTimeField(auto_now_add=True)
注意,使用新建的模型类,需要创建映射,并且传送到数据库
运行结果




三.表关系的实现
1.表关系如何实现的??????????

2.表图关系

3.表关系列子

代码:
mo_xin/models.py
from django.db import models # Create your models here. # 学院表模型 class Department(models.Model): d_id = models.AutoField(primary_key=True) d_name = models.CharField(max_length=30) def __str__(self): return "学院表<d_id=%s,d_name=%s>" % (self.d_id, self.d_name) #学生表 class Student1(models.Model): s_id = models.AutoField(primary_key=True) s_name = models.CharField(max_length=30) # 外键是一对一的时候需加上on_delete避免两个表中参数不一致报错,CASADE进行表级删除 s_department = models.ForeignKey('Department',on_delete=models.CASCADE) s_course = models.ManyToManyField('Course') def __str__(self): return "学生表<s_id=%s,s_name=%s>" % (self.s_id, self.s_name) #课程表模型 class Course(models.Model): c_id = models.AutoField(primary_key=True) c_name = models.CharField(max_length=30) def __str__(self): return "课程表<c_id=%s,c_name=%s>" % (self.c_id, self.c_name) #学生表细节模型 class StuDetail(models.Model): sd_id = models.OneToOneField('Student1',on_delete=models.CASCADE) sd_age = models.IntegerField() sd_gender = models.BooleanField(default=True) sd_city = models.CharField(max_length=30,null=True) def __str__(self): return "学生详情表<sd_id=%s,sd_name=%s>" % (self.sd_id, self.sd_age)
创建映射文件,传递给数据库

运行结果



浙公网安备 33010602011771号