1. 普通查詢
- 數據庫的查詢需要使用管理器對象進行
- 通過MyModel.objects管理器方法調用查詢方法
方法 | 說明 |
---|---|
all() | 查詢全部記錄,返回QuerySet查詢對象 |
get() | 查詢符合條件的單一記錄 |
filter() | 查詢符合條件的多條記錄 |
exclude() | 查詢符合條件之外的全部記錄 |
... |
-
all()
用法:MyModel.objects.all()
作用:查詢MyModel實體中的所有的數據
等同於select * from table
返回值:QuerySet容器對象,內部存放MyModel實例
from bookstore.models import Book
books = Book.objects.all()
from book in books:
print('書名',book.title,'出版社',book.pub)
tips:_str_類似java的toString(),可以打印對象的時候更友好
-
values()
用法:MyModel.objects.values('列1','列2')
作用:查詢部分列的數據並返回
等同於select 列1,列2 from table
返回值:QuerySet
- 返回查詢結果容器,容器內存字典,每一個字典代表一條數據,格式爲:{'列1':'值1','列2':'值2'}
>>> a2 = Book.objects.values('title','pub')
>>> a2
<QuerySet [{'title': 'Python', 'pub': '清華大學出版社'}, {'title': 'Django', 'pub': '清華大學出版社'}]>
-
values_list()
用法:MyModel.objects.values_list('列1','列2')
作用:返回元組形式的查詢結果
等同於select 列1,列2 from table
返回值:QuerySet,容器內存'元組'
- 會將查詢出來的數據封裝到元組中,再封裝到查詢集合QuerySet中
>>> a2 = Book.objects.values_list('title','pub')
>>> a2
<QuerySet [('Python', '清華大學出版社'), ('Django', '清華大學出版社')]>
-
order_by()
用法:MyModel.objects.order_by('-列1','列2')
作用:與all()方法不同,它會用SQL語句的ORDER BY 子句對查詢結果進行根據某個字段選擇性的排序
說明:默認是按照升序,降序排序則需要在列前增加'-'表示
>>> a2 = Book.objects.values_list('title','pub').order_by('-price')
>>> a2
<QuerySet [('Django', '清華大學出版社'), ('Python', '清華大學出版社')]>
tips:用 querySet對象.query可以反查出SQL的語句
>>> print(a2.query)
SELECT `book`.`title`, `book`.`pub` FROM `book` ORDER BY `book`.`price` DESC
測試用例:
- bookstore/templates/bookstore/all_book.html
<body>
<table border="1">
<tr>
<th>id</th>
<th>title</th>
<th>pub</th>
<th>price</th>
<th>market_price</th>
<th>op</th>
</tr>
{% for book in all_book %}
<tr>
<th>{{book.id}}</th>
<th>{{book.title}}</th>
<th>{{book.pub}}</th>
<th>{{book.price}}</th>
<th>{{book.market_price}}</th>
<th>
<a href="">更新</a>
<a href="">刪除</a>
</th>
</tr>
{% endfor %}
</table>
</body>
- bookstore/views.py
def all_book(request):
all_book = Book.objects.all()
return render(request,'bookstore/all_book.html',locals())
- mysite1/urls.py
urlpatterns = [
path('bookstore/',include('bookstore.urls')),
]
- bookstore/urls.py
urlpatterns = [
path('all_book',views.all_book)
]
2. 條件查詢
-
filter(條件)
語法:MyModel.objects.filter(屬性1=值1,屬性2=值2)
作用:返回包含此條件的全部的數據集
返回值:QuerySet容器對象,內部存放MyModel實例
說明:當多個屬性在一起時爲“與”關係,即當 -
exclude(條件)
語法:MyModel.objects.exclude(條件)
作用:返回不包含此條件的全部的數據集 -
get(條件)
語法:MyModel.objects.get(條件)
作用:返回滿足條件的唯一一條數據
說明:該方法只能返回一條數據
查詢結果多餘一條 數據則拋出異常
【Model.MultipleObjectsReturned異常】
查詢結果如果沒有數據則拋出異常
【Model.DoesNotExist 異常】
3. 查詢謂詞(非等值的過濾查詢)
- 定義:做更靈活的條件查詢時需要使用查詢謂詞
- 說明:每一個查詢謂詞是一個獨立的查詢功能
-
__exact:等值匹配
示例:Author.objects.filter(id__exact=1)
-
__contains:包含指定值
示例:Author.objects.filter(name__contains='w')
-
__startswith:以xxx開始
-
__endswith:以xxx結束
-
__gt:大於指定值
-
__gte:大於等於
-
__lt:小於
-
__lte:小於等於
-
__in:查找數據是否在指定範圍內
示例:Author.objects.filter(country__in=['中國','日本','韓國'])
-
__range:查找數據是否在指定的區間範圍內
示例:Author.objects.filter(age__range=(35,50))