Django——7 常用的查询 常用的模型字段类型 Field的常用参数 表关系的实现

时间:2022-04-14 23:45:03

Django

  1. 常用的查询
    1. 常用的查询方法
    2. 常用的查询条件
  2. 常用字段映射关系
  3. Field常用参数
  4. 表关系的实现

查用的查询方法

Django——7 常用的查询   常用的模型字段类型   Field的常用参数    表关系的实现

这是需要用到的数据

Django——7 常用的查询   常用的模型字段类型   Field的常用参数    表关系的实现

from django.http import HttpResponse
from .models import User def special_search(request): # 查询所有的记录
res = User.objects.all()
print(res) return HttpResponse('查询成功')

Django——7 常用的查询   常用的模型字段类型   Field的常用参数    表关系的实现

# 查询第一条数据
res = User.objects.first()

Django——7 常用的查询   常用的模型字段类型   Field的常用参数    表关系的实现

# 查询最后一条数据
res = User.objects.last()

Django——7 常用的查询   常用的模型字段类型   Field的常用参数    表关系的实现

# 根据条件查询满足条件的结果
res = User.objects.filter(name='李四')

Django——7 常用的查询   常用的模型字段类型   Field的常用参数    表关系的实现

# 按条件获取排除以后的数据
res = User.objects.exclude(name='周六')

Django——7 常用的查询   常用的模型字段类型   Field的常用参数    表关系的实现

# 获取一个对象
res = User.objects.get(name='王五')

Django——7 常用的查询   常用的模型字段类型   Field的常用参数    表关系的实现

# 对结果进行排序
res = User.objects.order_by('age')

Django——7 常用的查询   常用的模型字段类型   Field的常用参数    表关系的实现

# 多项排序
res = User.objects.order_by('age', 'id')

Django——7 常用的查询   常用的模型字段类型   Field的常用参数    表关系的实现

# 逆向排序
res = User.objects.order_by('-age')

Django——7 常用的查询   常用的模型字段类型   Field的常用参数    表关系的实现

# 将返回的QuerySet数据转换成字典
res = User.objects.all().values()

Django——7 常用的查询   常用的模型字段类型   Field的常用参数    表关系的实现

这里可以发现,多出了city属性,因为

Django——7 常用的查询   常用的模型字段类型   Field的常用参数    表关系的实现

我没有加上__str__的city属性的输出,可以得出结论:

.values()方法可以直接获取模型数据的属性,不需要重定义输出

# 查询数据的总数
res = User.objects.count()

Django——7 常用的查询   常用的模型字段类型   Field的常用参数    表关系的实现

常用的常洵条件

Django——7 常用的查询   常用的模型字段类型   Field的常用参数    表关系的实现

查找对象的条件的意思是传给以上方法的一些参数。相当于是SQL语句中的where语句后面的条件,语法为字段名__规则(是连着连个下划线哦)

# 等于exact  iexact忽略大小写
res = User.objects.filter(name__exact='李四')

Django——7 常用的查询   常用的模型字段类型   Field的常用参数    表关系的实现

# 包含contains icontains 忽略大小写
res = User.objects.filter(name__contains='六')

Django——7 常用的查询   常用的模型字段类型   Field的常用参数    表关系的实现

# 以什么开始 startswith  istartswith忽略大小写
res = User.objects.filter(name__startswith='张')

Django——7 常用的查询   常用的模型字段类型   Field的常用参数    表关系的实现

# 以什么结尾 endswith iendswith忽略大小写
res = User.objects.filter(name__endswith='五')

Django——7 常用的查询   常用的模型字段类型   Field的常用参数    表关系的实现

# 成员所属 in
res = User.objects.filter(age__in=[22, 23, 24])

Django——7 常用的查询   常用的模型字段类型   Field的常用参数    表关系的实现

# gt 大于
res = User.objects.filter(age__gt=22)

Django——7 常用的查询   常用的模型字段类型   Field的常用参数    表关系的实现

# lt 小于
res = User.objects.filter(age__lt=21)

Django——7 常用的查询   常用的模型字段类型   Field的常用参数    表关系的实现

# 大于等于或者小于等于后面加上e
res = User.objects.filter(age__gte=22)

Django——7 常用的查询   常用的模型字段类型   Field的常用参数    表关系的实现

# 区间 range
res = User.objects.filter(age__range=(21, 22))

Django——7 常用的查询   常用的模型字段类型   Field的常用参数    表关系的实现

# isnull 获取数据为空的
res = User.objects.filter(city__isnull=True)
# 获取不为空的数据
print(User.objects.filter(city__isnull=False))

Django——7 常用的查询   常用的模型字段类型   Field的常用参数    表关系的实现

 常用字段映射关系

Django——7 常用的查询   常用的模型字段类型   Field的常用参数    表关系的实现

  • IntegerField : 整型,映射到数据库中的int类型。
  • CharField:  字符类型,映射到数据库中的varchar类型,通过max_length指定最大长度。
  • TextField:  文本类型,映射到数据库中的text类型。
  • BooleanField: 布尔类型,映射到数据库中的tinyint类型,在使用的时候,传递True/False进去。如果要可以为空,则用NullBooleanField。
  • DateField:  日期类型,没有时间。映射到数据库中是date类型,在使用的时候,可以设置DateField.auto_now每次保存对象时,自动设置该字段为当前时间。设置DateField.auto_now_add当对象第一次被创建时自动设置当前时间。
  • DateTimeField:   日期时间类型。映射到数据库中的是datetime类型, 在使用的时候,传递datetime.datetime()进去。

Field的常用参数

  • primary_key:  指定是否为主键。
  • unique:  指定是否唯一。
  • null:  指定是否为空,默认为False。
  • blank: 等于True时form表单验证时可以为空,默认为False。
  • default:  设置默认值。
  • DateField.auto_now:  每次修改都会将当前时间更新进去,只有调用,QuerySet.update方法将不会调用。这个参数只是Date和DateTime以及TimModel.save()方法才会调用e类才有的。
  • DateField.auto_now_add:  第一次添加进去,都会将当前时间设置进去。以后修改,不会修改这个值

models.py

class Test(models.Model):
name = models.CharField(max_length=10)
age = models.IntegerField()
note = models.TextField()
gender = models.BooleanField(default=True)
create_time = models.DateField(auto_now_add=True)
update_time = models.DateTimeField(auto_now=True)

创建映射文件并生成数据表

查看数据结构:

Django——7 常用的查询   常用的模型字段类型   Field的常用参数    表关系的实现

我们来添加数据

views:

def test(request):
Test.objects.get_or_create(name='A', age=18, note='I am A', gender=True)
Test.objects.get_or_create(name='B', age=19, note='I am B', gender=False)
return HttpResponse('数据添加成功')

Django——7 常用的查询   常用的模型字段类型   Field的常用参数    表关系的实现

需要注意的一点:update_time,只用通过.save()方法,才能实现更新

现在运行如下代码:

def test(request):
# Test.objects.get_or_create(name='A', age=18, note='I am A', gender=True)
# Test.objects.get_or_create(name='B', age=19, note='I am B', gender=False)
Test.objects.filter(name='A').update(age=20)
res = Test.objects.get(name='B')
res.age = 22
res.save()
return HttpResponse('数据添加成功')

Django——7 常用的查询   常用的模型字段类型   Field的常用参数    表关系的实现

表数据关系

Django——7 常用的查询   常用的模型字段类型   Field的常用参数    表关系的实现

表关系举例

Django——7 常用的查询   常用的模型字段类型   Field的常用参数    表关系的实现

创建学院表:

class Department(models.Model):
d_id = models.AutoField(primary_key=True)
d_name = models.CharField(max_length=10)
def __str__(self):
return 'Department<d_id=%s, d_name=%s>'%(
self.d_id, self.d_name
)

创建学生表,与学院表成一对多,外键关联:

class Student(models.Model):
s_id = models.AutoField(primary_key=True)
s_name = models.CharField(max_length=10)
department = models.ForeignKey('Department', on_delete=models.CASCADE)
def __str__(self):
return 'Student<s_id=%s, s_name=%s>'%(
self.s_id, self.s_name
)

学生详情表,与学生表一对一

class Stu_Detail(models.Model):
s_id = models.OneToOneField('Student', on_delete=models.CASCADE)
age = models.IntegerField()
gender = models.BooleanField(default=True)
city = models.CharField(max_length=30)
def __str__(self):
return 'Stu_Detail<s_id=%s, age=%s, gender=%s, city=%s>'%(
self.s_id, self.age, self.gender, self.city
)

课程表,与学生表成多对多,自动生成三方表

class Course(models.Model):
c_id = models.AutoField(primary_key=True)
name = models.CharField(max_length=10)
student = models.ManyToManyField('Student')
def __str__(self):
return 'Course<c_id=%s, name=%s>'%(
self.c_id, self.name
)

注意:

  • 外键和一对一关系的时候需要加on_delete选项,此参数为了避免两个表里的数据不一致问题,不然会报错!
  • 一般使用CASCADE表示级联删除
  • 关于on_delete还有其他的一些属性:
    • on_delete=models.CASCADE==>主表属性删除,相关联的子表属性会一并删除  (推荐)
    • on_delete=models.SET_NULL, null=True ==>主表属性删除,相关联的字表属性会变成NULL
    • on_delete=models.PROTECT==>有关联的时候,不允许删除,否则会报错

执行完makemigrations和migrate的命令后,在数据库我们能看到5张表,其中多对多关系的ManyToManyField
方法自动生成了关系表.
Django——7 常用的查询   常用的模型字段类型   Field的常用参数    表关系的实现