前提是創建好了ORM的模型(參照https://www.cnblogs.com/ifdashui/p/11901084.html)
現在數據庫中存在下列的數據(以下的查詢條件根據這些數據做處理)
在models.py中
# -*- coding: UTF-8 -*- from django.db import models class Article(models.Model): title = models.CharField(max_length=200) content = models.TextField() class Meta: db_table = 'article' #更改這個表的名字,映射到數據中的話名稱不是Article_article了,是你自定義設置的article
使用下面這兩條命令在數據庫中映射:(注意進入項目路徑以及有虛擬環境的進入虛擬環境)
python manage.py makemigrations
python manage.py migrate
接下來就在views.py中操作即可
在model.py中,創建一個ORM模型
from django.db import models class Article(models.Model): title = models.CharField(max_length=200) content = models.TextField() category = models.ForeignKey('Category',on_delete=models.CASCADE,null=True) #關聯上這個表 class Meta: db_table = 'article' #更改這個表的名字,映射到數據中的話名稱不是Article_article了,是你自定義設置的article
查詢條件
然后再views.py中
1.exact 相當於數據庫底層的等號 =
from .models import Article def index(request): #1.exact 相當於數據庫底層的等號 = # article = Article.objects.filter(title__exact="Hello Word") #相當於數據庫底層的 select ··· from ··· where title='Hello World'
2.iexact 相當於數據庫底層的 like
#2.iexact 相當於數據庫底層的 like # article = Article.objects.filter(title__iexact="Hello Word") #相當於數據庫底層 article` WHERE `article`.`title` LIKE Hello Word
3.contains 使用大小寫敏感判斷,某個字符是否存在指定字符串中,也就是你查找a,數據庫中是A,那么就查詢不到
#3.contains 使用大小寫敏感判斷,某個字符是否存在指定字符串中,也就是你查找a,數據庫中是A,那么就查詢不到 article = Article.objects.filter(title__contains='hello') #即相當於數據庫底層的select ··· from ··· where title like '%Hello World%'
4.icontains 使用大小寫是不敏感的 也就是你查找a,數據庫中是A,那么一樣查詢得到
#4.icontains 使用大小寫是不敏感的 也就是你查找a,數據庫中是A,那么一樣查詢得到 # article = Article.objects.filter(title__icontains='hello') #select ··· from ··· where title like '%Hello World%' 百分號也就是你這個字符串中只要包含相關的數據就都能查詢出來
5.in 查詢條件是否在給定的范圍內,用小括號和中括號都可以
#5.in 查詢條件是否在給定的范圍內,用小括號和中括號都可以 # articles = Article.objects.filter(id_in=[1,2]) #提取出id=1,id=2中的數據, 相當於數據庫底層的select ··· from ··· where id in [1,2] #如何不存在的話就不會提取出來
如果是多表下的查詢的話(需要在models.py中,在創建一個表,然后外鍵關聯上這個表)
models.py下
from django.db import models class Category(models.Model): name = models.CharField(max_length=100) class Meta: db_table = 'category' #更改這個表的名字,映射到數據中的話名稱是你自定義設置的這個名稱 class Article(models.Model): title = models.CharField(max_length=200) content = models.TextField() category = models.ForeignKey('Category',on_delete=models.CASCADE,null=True) #關聯上這個表 class Meta: db_table = 'article' #更改這個表的名字,映射到數據中的話名稱不是Article_article了,是你自定義設置的article
使用下面這兩條命令在數據庫中映射:(注意進入項目路徑以及有虛擬環境的進入虛擬環境)
python manage.py makemigrations
python manage.py migrate
在views.py下
#多表查詢下的操作 categorys = Category.objects.filter(article__id__in=[1,2]) #在article表下找到id為1和2,然后根據這個1和2分類出Category表下的數據,並且可以使用for循環打印出來 for category in categorys: print(category)
#這里為什么是 article ,因為這個張表(Article)使用META反向引用了(也就是給這張表改了個名字),
#直接使用的話模型的名字小寫化就行了,不用寫成article_set的形式,如果想更改這個默認的方法,在定義外鍵的時候
#傳遞related_query_name='自定義名字'
6.gt 找出大於什么什么的數據
#6.gt 找出大於什么什么的數據 articles = Article.objects.filter(id__gt=2) #查詢id大於2的所有數據 print(articles)
7.gte 也就是等於的意思
#7.gte 找出大於等於什么的數據 articles = Article.objects.filter(id__gte=2) #查詢id大於等於2的所有數據 print(articles)
8.lt 找出小於什么的數據
#8.lt 找出小於什么的數據 articles = Article.objects.filter(id__lt=2) #查詢id小於2的所有數據 print(articles)
9.lte 找出小於等什么的數據
#8.lte 找出小於等什么的數據 articles = Article.objects.filter(id__lte=2) #查詢id小於等於2的所有數據 print(articles)
10.startswith:以指定某個字符串開始,大小寫敏感
#10.startswith:以指定某個字符串開始,大小寫敏感 articles = Article.objects.filter(title__startswith='hello') #查詢該表下hello為開頭的數據,不是hello開頭,或者存在大小寫的都查詢不到 print(articles)
11.istartswith:以指定某個字符串開始,大小寫不敏感
#11.istartswith:以指定某個字符串開始,大小寫不敏感 articles = Article.objects.filter(title__istartswith='hello') #查詢該表下hello為開頭的數據,不是hello開頭的查詢不到,不在乎大小寫 print(articles)
12.endswith:查詢某個字符串結束的數據,大小寫敏感
#12.endswith:查詢某個字符串結束的數據,大小寫敏感 articles = Article.objects.filter(title__endswith='hello') #查詢該表下hello為結尾的數據,如果存在大寫,那就查找不出來 print(articles)
13.iendswith:查詢某個字符串結束的數據,大小寫不敏感
#13.iendswith:查詢某個字符串結束的數據,大小寫不敏感 articles = Article.objects.filter(title__iendswith='hello') #查詢該表下hello為結尾的數據,忽略大小寫 print(articles)
14.range:獲取某個范圍內的數據,即相當於between ··· and ···,用小括號和中括號都可以
這里以獲取某個時間段為例
先在models.py中增加一個時間字段
class Article(models.Model): title = models.CharField(max_length=200) content = models.TextField() category = models.ForeignKey('Category',on_delete=models.CASCADE,null=True) #關聯上這個表 create_time = models.DateTimeField(auto_now_add=True,null=True) #auto_now_add=True 自動獲得當前的時間並且設置進去
使用下面這兩條命令在數據庫中映射:(注意進入項目路徑以及有虛擬環境的進入虛擬環境)
python manage.py makemigrations
python manage.py migrate
接着在views.py中
#注意導入需要的庫
from datetime import datetime
from django.utils.timezone import make_aware
#14.range:獲取某個范圍內的數據,即相當於between ··· and ···,用小括號和中括號都可以 #這里以獲取某個時間段為例 start_time = make_aware(datetime(year=2019,month=4,day=4,hour=17,minute=0,second=0)) end_time = make_aware(datetime(year=2019,month=4,day=4,hour=18,minute=0,second=0)) articles = Article.objects.filter(create_time__range=(start_time,end_time)) print(articles)
15. date 時間的過濾的查找條件,根據年月日來查詢(time、year、week_day等)
articles = Article.objects.filter(create_time__date=datetime(year=2018,month=4,day=4)) #找到符合條件2018-4-4的所有數據 print(articles) return HttpResponse('success')16. isnull 判斷某個數據是否為空進行查找
16. isnull 判斷某個數據是否為空進行查找
#16. isnull 判斷某個數據是否為空進行查找 articles = Article.objects.filter(create_time__isnull=True) #獲取該create_time字段下為空的數據 print(articles)
17. regex 使用正則查詢數據,大小寫敏感
#17. regex 使用正則查詢數據,大小寫敏感 articles = Article.objects.filter(title__regex=r'^hell') #獲取該title字段下為開頭為hell的數據,區分大小寫 print(articles)
18. iregex 使用正則查詢數據,不區分大小寫
#18. iregex 使用正則查詢數據,不區分大小寫 articles = Article.objects.filter(title__iregex=r'^hell') #獲取該title字段下開頭為為hell的數據,不區分大小寫 print(articles)