django-ORM的查詢條件


前提是創建好了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)

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM