多平台统一管理软件接口,如何实现多平台统一管理软件接口
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~