Django(part24)--查询数据
學習筆記,僅供參考,有錯必糾
文章目錄
- 數據庫的操作(CRUD操作)
- 查詢數據
- all方法
- values方法
- values_list方法
- order_by方法
- filter方法
- get方法
- exclude方法
數據庫的操作(CRUD操作)
查詢數據
數據庫的查詢同樣需要使用管理器對象,即通過 Entry.objects 管理器方法調用查詢接口。
| all() | 查詢全部記錄,返回QuerySet查詢對象 |
| get() | 查詢符合條件的單一記錄 |
| filter() | 查詢符合條件的多條記錄 |
| exclude() | 查詢符合條件之外的全部記錄 |
all方法
- 用法
- 等同的mysql語句
我們在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方法會返回指定列,且查詢結果用字典表示。
- 用法
- 等同的mysql語句
- 返回值(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方法會返回指定列,且查詢結果用元祖表示。
- 用法
- 返回值(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 子句對查詢結果進行排序。
- 用法
默認是按照升序排序,降序排序則需要在列前增加-負號
- 舉個例子
我們在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 姓名: 山羊 年齡: 23filter方法
filter方法可以根據條件查詢多條記錄。
- 用法
- 返回值QuerySet
查詢結果返回值為QuerySet容器對象,容器內部存放Entry 實例。
- 舉個例子
我們在Django shell下敲入如下代碼:
In [7]: from bookstore import models...: books = models.Book.objects.filter(pub="機械工業出版社")...: for book in books:...: print("書名:", book.title)...: 書名: pythonget方法
利用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方法將返回不包含此條件的數據集
- 用法
- 舉個例子
總結
以上是生活随笔為你收集整理的Django(part24)--查询数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Django(part23)--Djan
- 下一篇: Django(part25)--字段查询