当前位置 : 主页 > 编程语言 > python >

Django(part24)--查询数据

来源:互联网 收集:自由互联 发布时间:2022-06-15
学习笔记,仅供参考,有错必纠 文章目录 ​​数据库的操作(CRUD操作)​​ ​​查询数据​​ ​​all方法​​ ​​values方法​​ ​​values_list方法​​ ​​order_by方法​​ ​​filter方

学习笔记,仅供参考,有错必纠



文章目录

  • ​​数据库的操作(CRUD操作)​​
  • ​​查询数据​​
  • ​​all方法​​
  • ​​values方法​​
  • ​​values_list方法​​
  • ​​order_by方法​​
  • ​​filter方法​​
  • ​​get方法​​
  • ​​exclude方法​​



数据库的操作(CRUD操作)



查询数据



数据库的查询同样需要使用管理器对象,即通过 Entry.objects 管理器方法调用查询接口。



方法

说明

all()

查询全部记录,返回QuerySet查询对象

get()

查询符合条件的单一记录

filter()

查询符合条件的多条记录

exclude()

查询符合条件之外的全部记录


all方法



  • 用法
Entry.objects.all()



  • 等同的mysql语句
select * from tabel;



我们在Django shell中敲入如下命令:

In [5]: from bookstore import models
...: books = models.Book.objects.all()
...: for book in books:
...: print("书名", book.title, '出版社:', book.pub)
...:
书名 Djangoweb开发实战 出版社: 清华大学出版社
书名 python 出版社: 机械工业出版社
书名 R 出版社: 人民邮电出版社



  • 自定义默认字符串

在models.py中我们也可以自定义默认字符串:

class Book(models.Model):
title = models.CharField("书名", max_length = 30)
pub = models.CharField("出版社名", max_length = 50,null = True)

def __str__(self):
string = "书名:%s, 出版社:%s" % (self.title, self.pub)
return string

更改过models.py文件后,记得进行迁移。



我们再次使用Django shell敲入如下命令:

In [1]: from bookstore import models
...: books = models.Book.objects.all()
...: for book in books:
...: print(book)
...:
书名:Djangoweb开发实战, 出版社:清华大学出版社
书名:python, 出版社:机械工业出版社
书名:R, 出版社:人民邮电出版社



values方法



values方法会返回指定列,且查询结果用字典表示。



  • 用法
Entry.objects.values(...)



  • 等同的mysql语句
select 列1,列2 from tabel;



  • 返回值(QuerySet容器对象)

QuerySet为查询结果容器,容器内存放着字典,每个字典代表一条数据,每一条数据的格式为:

{'列1': 值1, '列2': 值2}



  • 示例

我们在Django shell下敲入如下代码:

In [2]: from bookstore import models
...: books = models.Book.objects.values("title", "pub")
...: for book in books:
...: print("书名", book["title"], '出版社:', book['pub'])
...: print("book=", book)
...:
书名 Djangoweb开发实战 出版社: 清华大学出版社
book= {'title': 'Djangoweb开发实战', 'pub': '清华大学出版社'}
书名 python 出版社: 机械工业出版社
book= {'title': 'python', 'pub': '机械工业出版社'}
书名 R 出版社: 人民邮电出版社
book= {'title': 'R', 'pub': '人民邮电出版社'}



values_list方法



values_list方法会返回指定列,且查询结果用元祖表示。



  • 用法
Entry.objects.values_list(...)



  • 返回值(QuerySet容器对象)

查询出来的数据会被封装到元组中,再封装到查询集合QuerySet中。



  • 示例

我们在Django shell下敲入如下代码:

In [3]: from bookstore import models
...: books = models.Book.objects.values_list("title", "pub")
...: for book in books:
...: print("book=", book)
...:
book= ('Djangoweb开发实战', '清华大学出版社')
book= ('python', '机械工业出版社')
book= ('R', '人民邮电出版社')



order_by方法



利用order_by方法可以进行排序查询,与all()方法不同的是,它会用SQL 语句的ORDER BY 子句对查询结果进行排序。



  • 用法
Entry.objects.order_by('-列','列')

默认是按照升序排序,降序排序则需要在列前增加​​-​​负号



  • 举个例子

我们在Django shell下敲入如下代码:

In [6]: from bookstore import models
...: authors = models.Author.objects.order_by("age")
...: for author in authors:
...: print("姓名:", author.name, '年龄:', author.age)
...:
姓名: 小黄 年龄: 10
姓名: 山羊 年龄: 23



filter方法



filter方法可以根据条件查询多条记录。



  • 用法
Entry.objects.filter(属性1=值1, 属性2=值2)



  • 返回值QuerySet

查询结果返回值为QuerySet容器对象,容器内部存放Entry 实例。



  • 举个例子


我们在Django shell下敲入如下代码:

In [7]: from bookstore import models
...: books = models.Book.objects.filter(pub="机械工业出版社")
...: for book in books:
...: print("书名:", book.title)
...:
书名: python



get方法



利用get方法可以返回满足查询条件的唯一一条数据,



  • 用法
Entry.objects.get(条件)



  • 返回值

Entry 对象



  • 举个例子


如果我们的查询结果多于1条,则会报MultipleObjectsReturned异常

from bookstore import models
author = models.Author.objects.get(age__range=(20,30))

报错信息:

MultipleObjectsReturned: get() returned more than one Author -- it returned 2!



如果没有查询结果,则抛出Model.DoesNotExist异常

from bookstore import models
author = models.Author.objects.get(id=100)

报错信息:

DoesNotExist: Author matching query does not exist.



如果查询结果只有1条,则不会报错:

In [12]: from bookstore import models
...: author = models.Author.objects.get(id=1)
...: print(author.name)
...:
山羊



exclude方法



exclude方法将返回不包含此条件的数据集



  • 用法
Entry.objects.exclude(条件)



  • 举个例子
In [13]: books = models.Book.objects.exclude(pub="清华大学出版社")
...: for book in books:
...: print(book)
...:
书名:python, 出版社:机械工业出版社
书名:R, 出版社:人民邮电出版社

上一篇:Django(part23)--Django shell的使用
下一篇:没有了
网友评论