Python学习笔记--使用Django查询数据

1.all():查所有

用于查询所有:

# all()返回的是 QuerySet 类型数据,类似于 list,里面放的是一个个模型类的对象,可用索引下标取出模型类的对象。
def query_book(request):
    books = models.Book.objects.all()
    for book in books:
        print(book.title, book.price, book.publish, book.pub_date)
    return HttpResponse("<p>查询成功!</p>")

2.filter():查询满足条件的数据

用于查询符合条件的数据,pk参数用于根据主键进行查询

def filter_book(request):
    books = models.Book.objects.filter(pk=1)
    print(books)
    print("/////////////////////////////////")
    books = models.Book.objects.filter(publish="清华大学出版社",price=300)
    print(books, type(books))
    return HttpResponse("<p>查询成功!</p>")

3.exclude():查询不符合条件的数据

用于查询不符合条件的数据

def exclude_book(request):
    books = models.Book.objects.exclude(publish="清华大学出版社")
    print(books, type(books))
    return HttpResponse("<p>查询成功!</p>")

4.get():获取一个对象

用于查询符合条件的返回模型类的对象符合条件的对象只能为一个,如果符合筛选条件的对象超过了一个或者一个都没有都会抛出错误

def get_book(request):
    book = models.Book.objects.get(pk=5)
    book = models.Book.objects.get(price=1000)
    print(book, type(book))
    return HttpResponse("<p>查询成功!</p>")

5.order_by():排序

用于对查询结果进行排序,参数为排序字段名,默认为升序排序,降序为在字段前面加个负号 -

def order_book(request):
    books = models.Book.objects.order_by("price")
    print(books, type(books))
    books = models.Book.objects.order_by("-price")
    print(books, type(books))
    return HttpResponse("<p>查询成功!</p>")

6.reverse():对排序进行反转

用于对原排序查询结果进行反转

def reverse_book(request):
    # 按出版日期升序排列
    books_asc = models.Book.objects.all().order_by("pub_date")
    # 使用reverse()方法对查询结果进行反转后变为降序
    books = books_asc.reverse()
    for book in books:
        print(book.id,book.title, book.price, book.publish, book.pub_date)
    return HttpResponse("<p>查询成功!</p>")

7.count():计数

用于统计查询结果的数量

def count_book(request):
    count = models.Book.objects.count()
    books = models.Book.objects.filter(price=300).count()
    print(count, books)
    return HttpResponse("<p>查询成功!</p>")

8.first():查询第1条数据

用于返回查询结果的第一个对象,如果没有符合条件的对象则返回 None,可以用索引下标 [0] 取出模型类的对象

def first_book(request):
    book = models.Book.objects.first()
    print(book, type(book))
    return HttpResponse("<p>查询成功!</p>")

9.last():查询最后第1条数据

用于返回查询结果的最后一个对象,如果没有符合条件的对象则返回 None,注意:last() 方法不能用索引下标 [-1],ORM 没有逆序索引。

def last_book(request):
    book = models.Book.objects.last()
    print(book, type(book))
    return HttpResponse("<p>查询成功!</p>")

10.exists() :判断是否存在

用于判断查询结果是否存在,返回布尔值 True 或 False

def exists_book(request):
    exist = models.Book.objects.filter(price=300).exists()
    print(exist)
    return HttpResponse("<p>查询成功!</p>")

11.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>")

执行后控制台输出:

200.00 <class 'django.db.models.query.QuerySet'>
[03/Sep/2025 10:56:28] "GET /values_book/ HTTP/1.1" 200 22

12.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>")

执行后控制台输出:

<QuerySet [(Decimal('200.00'), '功夫出版社'), (Decimal('200.00'), '清华大学出版社'), (Decimal('300.00'), '清华大学出版社')]>
200.00 <class 'django.db.models.query.QuerySet'>

13.distinct():去重

用于返回查询结果的去重后的列表,一般是结合 values 或者 values_list 使用。

def distinct_book(request):
    # 对对象去重没有意义,因为对象本身就是唯一的,不可能重复
    books = models.Book.objects.distinct()
    print(books)
    # 结合 values_list 使用,查询出所有的publish字段的去重后的列表
    books = models.Book.objects.values_list("publish").distinct()
    print(books)
    return HttpResponse("<p>查找成功!</p>")

执行后控制台输出

<QuerySet [('功夫出版社',), ('清华大学出版社',)]>
<QuerySet [<Book: Book object (1)>, <Book: Book object (2)>, <Book: Book object (3)>]>

第1个结果进行了去重,第2个对对象去重没有意义。

14.filter基于双下划线的模糊查询

(1)区间范围查询,包括in、gt、gte、lt、lte、range

# 使用双下划线+in进行区间查询
books = models.Book.objects.filter(price__in=[100,200])
# 查询价格大于200的数据
books = models.Book.objects.filter(price__gt=200)
# 查询价格大于等于100的数据
books = models.Book.objects.filter(price__gte=100)
# 查询价格小于等于100的数据
books = models.Book.objects.filter(price__lte=100)
# 查询价格介于100和200之间的数据,包括100和200
books = models.Book.objects.filter(price__range=[100,200])

(2)包含:__contains区分大小写,__icontains不区分大小写

books = models.Book.objects.filter(title__icontains="python")

(3)查询以特定内容开头、结尾、精准匹配:__startswoth、__endswith、__iexact

# 查询标题以python开头的数据
books = models.Book.objects.filter(title__startswith="python")
# 查询标题以python结尾的数据
books = models.Book.objects.filter(title__endswith="python")
#  查询标题精确匹配python的数据
books = models.Book.objects.filter(title__iexact="python")

(4)日期查询:__year、__month、__day

# __year 是 DateField 数据类型的年份,= 号后面为数字。
books = models.Book.objects.filter(pub_date__year=2015)
# __month 是 DateField 数据类型的月份,= 号后面为数字。
books = models.Book.objects.filter(pub_date__month=10)
# __day 是 DateField 数据类型的日,= 号后面为数字。
books = models.Book.objects.filter(pub_date__day=10)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值