Django 模型的增删改查

Django 模型的增删改查

在这里假设我们创建的模型名为Model

Model.objects.create(**kw)

如果新建了一个Model对象则需要对该对象调用save()方法才能保存

  • 查所有:Model.objects.all()
    • 查询结果是否非空(速度比len和bool更快):Model.objects.all().exists()
    • 支持切片,但不支持负索引,可以改用.reverse()方法倒序查询
  • 查匹配条件的一个:Model.objects.get(**kw)
  • 尝试查,若查不到则增:Model.objects.get_or_create(**kw)

    返回值(object,True或False),增为True,查为False

  • 查匹配条件的所有:Model.objects.filter(**kw)
    • <字段名>__iexact:不区分大小写
    • <字段名>__contains:包含
    • <字段名>__icontains:包含且不区分大小写
    • <字段名>__regex:正则
    • <字段名>__iregex:正则且不区分大小写
  • 查不匹配条件的所有:Model.objects.exclude(**kw)
  • 计数:.count()
  • 排序:.order_by(字段名)
    • 在字段名前加-可以实现倒序排序
    • .order_by("?")可以实现随机排序(速度较慢)
  • 去重:.distinct()
  • 排除不需要的字段:.defer(*字段名)
  • 仅选择需要的字段:.only(*字段名)
  • 获取元组形式结果:.values_list(**kw)

    如果只需要1个字段,可以指定 flat=True

  • 获取字典形式的结果:.values

查之后调用.delete(),既适用于单个对象也适用于QuerySet。

  1. 多个对象(QuerySet):查之后调用.update(**kw)
  2. 单个对象:查之后为对象的属性赋值,在此之后需要对该对象调用save()方法才能保存

其他

query属性返回了SQL的执行细节,取str后可返回执行的SQL语句

关于聚合查询,定义别名,多表联查的用法,可以参考Django QuerySet 进阶 - Django 教程 - 自强学堂


参考文献

  1. Django QuerySet API - Django 教程 - 自强学堂
  2. Django QuerySet 进阶 - Django 教程 - 自强学堂