1. 程式人生 > >Django ORM相關操作(2)

Django ORM相關操作(2)

今天就講講關於雙下劃線的操作,這是第二篇關於orm相關操作的文章,還想看請往上翻第一篇。

 

# -*- coding: utf-8 -*-
# @Time    : 2018/11/15 19:26
# @Author  : lh
# @Email   : .com
# @File    : orm_test.py
# @Software: PyCharm

"""
ORM小總結
前面講解了如何在一個python指令碼或者檔案中假裝Django專案的配置和變數資訊
"""
import os

if __name__ == '__main__':
    # 載入Django專案的配置資訊
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "Django_test1.settings")

    # 匯入Django專案,並且啟動專案
    import django
    django.setup()

    # 匯入你需要的models
    from users import models


    # # 使用.all()方法進行查詢所有的書籍
    # print('.all()'.center(100, '#'))
    # ret = models.Books.objects.all()
    # print(ret)
    #
    # #使用.filter()方法進行篩選查詢
    # print('.filter()'.center(100, '#'))
    # ret = models.Books.objects.filter(id=1) # 使用filter() 比使用get()方法要好,如果資料不存在就返回空,不會報錯
    # print(ret)
    #
    # # 使用exclude()方法進行查詢,他返回與所給篩選條件不匹配的物件
    # print('.exclude()'.center(100, '#'))
    # ret = models.Books.objects.exclude(id=1)
    # print(ret)
    #
    # # 使用values()方法進行查詢, 返回一個ValueQuerySet——一個特殊的QuerySet,執行後得到的並不是一系列model的例項化物件,而是一個可迭代的字典序列
    # print('.values()'.center(100, '#'))
    # ret = models.Books.objects.values() #如果返回空的欄位,預設返回所有的資料。也可以加欄位(.values('name'))
    # print(ret)
    #
    # print("values_list".center(100, "#"))
    # # # values_list 返回一個QuerySet物件,裡面都是元祖。 不寫欄位名,預設查詢所有欄位
    # ret = models.Books.objects.values_list()
    # print(ret)
    #
    # print("count".center(100, "*"))
    # # # count 返回QuerySet中物件的數量
    # ret = models.Books.objects.all().count()
    # print(ret)
    #
    # print("first".center(100, "*"))
    # # # first 返回QuerySet中第一個物件
    # ret = models.Books.objects.all().first()
    # print(ret)
    #
    # print("last".center(100, "*"))
    # # # last 返回QuerySet中最後一個物件
    # ret = models.Books.objects.all().last()
    # print(ret)
    #
    # print("exists".center(100, "*"))
    # # # exists 判斷表裡有沒有資料
    # ret = models.Books.objects.exists()
    # print(ret)

    # 雙下劃綫查詢
    ret = models.Author.objects.filter(id__gt=1 , id__lt=10)  # 獲取id大於1而且小於10的值
    print(ret)

    print('id__in'.center(100, '!'))
    ret = models.Author.objects.filter(id__in=[6, 7, 22])  # 獲取id為6,7,22的值
    print(ret)

    ret = models.Author.objects.filter(name__contains='小')  # 獲取名字欄位包含小的值
    print(ret)

    ret = models.Author.objects.filter(id__range=[1, 10])  # 獲取id範圍1~10的所有值,相當於sql的bettwen and
    print(ret)














輸出結果: