Django(part24)--查询数据(django数据统计)

网友投稿 280 2022-08-31


Django(part24)--查询数据(django数据统计)

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

文章目录

​​数据库的操作(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 modelsauthor = models.Author.objects.get(age__range=(20,30))

报错信息:

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

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

from bookstore import modelsauthor = 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, 出版社:人民邮电出版社


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Django(part23)--Django shell的使用(django 3)
下一篇:response文件流输出文件名中文不显示的解决
相关文章

 发表评论

暂时没有评论,来抢沙发吧~