Summary of various methods for adding, deleting, modifying and checking objects in Django

from django.shortcuts import render,HttpResponse
from app01 import models

# 使用Book对象,来增加数据
def add_book(request):
    book = models.Book(title="菜鸟教程",price=300,publish="菜鸟出版社",pub_date="2008-8-8")
    book.save()
    return HttpResponse("<p>数据添加成功!</p>")

# 使用objects.create 来添加Book数据
def create_book(request):
    books = models.Book.objects.create(title="如来神掌",price=200,publish="功夫出版社",pub_date="2010-10-10")
    print(books, type(books)) # Book object (18)
    return HttpResponse("<p>数据添加成功!</p>")
# 搜索 Book 的所有数据
def query_all_book(request):
    books = models.Book.objects.all()
    print(books,type(books)) # QuerySet类型,类似于list,访问 url 时数据显示在命令行窗口中。
    return HttpResponse("<p>查找成功!</p>")

# filter() 方法用于查询符合条件的数据。
def filter_book(request):
    books = models.Book.objects.filter(pk=5)
    print(books)
    print("//")
    books = models.Book.objects.filter(publish='菜鸟出版社', price=300)
    print(books, type(books))  # QuerySet类型,类似于list。
    return HttpResponse("<p>查找成功!</p>")

# exclude() 方法用于查询不符合条件的数据。
def exclude_book(request):
    books = models.Book.objects.exclude(pk=5)
    print(books)
    print("//")
    books = models.Book.objects.exclude(publish='菜鸟出版社', price=300)
    print(books, type(books))  # QuerySet类型,类似于list。
    return HttpResponse("<p>查找成功!</p>")


# get() 方法用于查询符合条件的返回模型类的对象符合条件的对象只能为一个,
# 如果符合筛选条件的对象超过了一个或者没有一个都会抛出错误。
def get_book(request):
    books = models.Book.objects.get(pk=5)
    books = models.Book.objects.get(pk=18)  # 报错,没有符合条件的对象
    books = models.Book.objects.get(price=200)  # 报错,符合条件的对象超过一个
    print(books, type(books))  # 模型类的对象
    return HttpResponse("<p>查找成功!</p>")

# order_by() 方法用于对查询结果进行排序。
# 返回的是 QuerySet类型数据,类似于list,里面放的是排序后的模型类的对象,可用索引下标取出模型类的对象。
# a、参数的字段名要加引号。
# b、降序为在字段前面加个负号 -
def order_by_book(request):
    books = models.Book.objects.order_by("price") # 查询所有,按照价格升序排列
    books = models.Book.objects.order_by("-price") # 查询所有,按照价格降序排列
    return HttpResponse("<p>查找成功!</p>")


# reverse() 方法用于对查询结果进行反转。
def reverse_book(request):
    # 按照价格升序排列:降序再反转
    books = models.Book.objects.order_by("-price").reverse()
    return HttpResponse("<p>查找成功!</p>")

# count() 方法用于查询数据的数量返回的数据是整数。
def count_book(request):
    books = models.Book.objects.count() # 查询所有数据的数量
    books = models.Book.objects.filter(price=200).count() # 查询符合条件数据的数量
    return HttpResponse("<p>查找成功!</p>")

# first() 方法返回第一条数据返回的数据是模型类的对象也可以用索引下标 [0]。
def first_book(request):
    books = models.Book.objects.first() # 返回所有数据的第一条数据
    return HttpResponse("<p>查找成功!</p>")

# last() 方法返回最后一条数据返回的数据是模型类的对象不能用索引下标 [-1],ORM 没有逆序索引。
def last_book(request):
    books = models.Book.objects.last() # 返回所有数据的最后一条数据
    return HttpResponse("<p>查找成功!</p>")

# exists() 方法用于判断查询的结果 QuerySet 列表里是否有数据。
# 返回的数据类型是布尔,有为 true,没有为 false。
def exists_book(request):
    books = models.Book.objects.exists()
    # 报错,判断的数据类型只能为QuerySet类型数据,不能为整型
    books = models.Book.objects.count().exists()
    # 报错,判断的数据类型只能为QuerySet类型数据,不能为模型类对象
    books = models.Book.objects.first().exists()
    return HttpResponse("<p>查找成功!</p>")

# values() 方法用于查询部分字段的数据。
# 返回的是 QuerySet 类型数据,类似于 list,里面不是模型类的对象,而是一个可迭代的字典序列,字典里的键是字段,值是数据。
# 参数的字段名要加引号
# 想要字段名和数据用 values
def values_book(request):
    # 查询所有的id字段和price字段的数据
    books = models.Book.objects.values("pk","price")
    print(books[0]["price"],type(books)) # 得到的是第一条记录的price字段的数据
    return HttpResponse("<p>查找成功!</p>")

# values_list() 方法用于查询部分字段的数据。
# 返回的是 QuerySet 类型数据,类似于 list,里面不是模型类的对象,而是一个个元组,元组里放的是查询字段对应的数据。
# 参数的字段名要加引号
# 只想要数据用 values_list

def  values_list_book(request):
    # 查询所有的price字段和publish字段的数据
    books = models.Book.objects.values_list("price","publish")
    print(books)
    print(books[0][0],type(books)) # 得到的是第一条记录的price字段的数据
    return HttpResponse("<p>查找成功!</p>")

# distinct() 方法用于对数据进行去重。
# 返回的是 QuerySet 类型数据。
# 对模型类的对象去重没有意义,因为每个对象都是一个不一样的存在。
# distinct() 一般是联合 values 或者 values_list 使用。

def distinct_book(request):
    # 查询一共有多少个出版社
    books = models.Book.objects.values_list("publish").distinct() # 对模型类的对象去重没有意义,因为每个对象都是一个不一样的存在。
    books = models.Book.objects.distinct()
    return HttpResponse("<p>查找成功!</p>")

# filter() 方法基于双下划线的模糊查询(exclude 同理)。
# 注意:filter 中运算符号只能使用等于号 = ,不能使用大于号 > ,小于号 < ,等等其他符号。
# __in 用于读取区间,= 号后面为列表 。
def filter_lg_book(request):
    # 查询价格为200或者300的数据
    books = models.Book.objects.filter(price__in=[200,300])
    # __gt 大于号 ,= 号后面为数字。
    # 查询价格大于200的数据
    books = models.Book.objects.filter(price__gt=200)

    # 查询价格大于等于200的数据
    # __gte大于等于,= 号后面为数字。
    books = models.Book.objects.filter(price__gte=200)
    # __lt小于,=号后面为数字
    # 查询价格小于300的数据
    books = models.Book.objects.filter(price__lt=300)
    # __lte 小于等于,= 号后面为数字。
    # 查询价格小于等于300的数据
    books = models.Book.objects.filter(price__lte=300)

    # __range 在...之间,左闭右闭区间,= 号后面为两个元素的列表。
    books = models.Book.objects.filter(price__range=[200, 300])
    # __contains包含,= 号后面为字符串。
    books = models.Book.objects.filter(title__contains="菜")
    # __icontains  不区分大小写的包含,= 号后面为字符串。
    books = models.Book.objects.filter(title__icontains="python")  # 不区分大小写
    # __startswith 以指定字符开头,= 号后面为字符串。
    books = models.Book.objects.filter(title__startswith="菜")
    # __endswith  以指定字符结尾,= 号后面为字符串。
    books = models.Book.objects.filter(title__endswith="教程")
    # __year 是DateField数据类型的年份,= 号后面为数字
    books = models.Book.objects.filter(pub_date__year=2008)
    # __month 是DateField 数据类型的月份,= 号后面为数字。
    books = models.Book.objects.filter(pub_date__month=10)
    # __day 是DateField 数据类型的天数,= 号后面为数字。
    books = models.Book.objects.filter(pub_date__day='01')
    # 删除
    # 方式一:使用模型类的 对象.delete()。
    # 返回值:元组,第一个元素为受影响的行数。
    books = models.Book.objects.filter(pk=8).first().delete()
    # 方式二:使用 QuerySet  类型数据.delete()(推荐)
    # 返回值:元组,第一个元素为受影响的行数。
    books = models.Book.objects.filter(pk__in=[1, 2]).delete()
    '''
    注意:
    a. Django 删除数据时,会模仿 SQL约束 ON DELETE CASCADE 的行为,也就是删除一个对象时也会删除与它相关联的外键对象。
    b. delete() 方法是 QuerySet 数据类型的方法,但并不适用于 Manager 本身。也就是想要删除所有数据,不能不写 all。
    books=models.Book.objects.delete()  # 报错
    books=models.Book.objects.all().delete()   # 删除成功
    '''



    return HttpResponse("<p>查找成功!</p>")

# 修改 方式一
# 模型类的对象.属性 = 更改的属性值
# 模型类的对象.save()
# 返回值:编辑的模型类的对象。
def modify_books1(request):

    books = models.Book.objects.filter(pk=7).first()
    books.price = 400
    books.save()
    return HttpResponse("<p>查找成功!</p>")

# 修改方式二:QuerySet  类型数据.update(字段名=更改的数据)(推荐)
# 返回值:整数,受影响的行数
def modify_book2(request):
    books = models.Book.objects.filter(pk__in=[7,8]).update(price=888)
    return HttpResponse(books)

Guess you like

Origin blog.csdn.net/davice_li/article/details/131680857