Django1.11模型類數據庫操做

django模型類數據庫操做

數據庫操做

添加數據

  • 1,建立類對象,屬性賦值添加
    • book= BookInfo(name='jack',pub_date='2010-1-1')
      book.save()
    • book= BookInfo()
      book.name = 'java'
      book.pub_date = '2010-1-1'
      book.save()
  • 2,使用模型類的create方法
    • BookInfo.objects.create(name='jack',pub_date='2010-1-1')
      • 直接建立java

        修改數據

  • 1,獲取模型類對象,屬性賦值修改
    • book = BookInfo.objects.get(name='jack')
      book.name='tom'
      book.pub_date='2010-1-1'
      book.save()
      • 由於修改的是模型類的屬性
        獲取對象的時候必需要使用get查詢,獲取類對象,
        使用filter會報沒有name屬性,由於filter結果是查詢集
  • 2,使用模型類結果集的update()
    能夠進行多個修改
    • BookInfo.objects.filter(name='tom').update(name='jack')
      • 直接修改,返回受影響的行數
        update是結果集的方法,使用filter查詢sql

        刪除數據

  • 1,獲取對應模型類對象,調用delete方法刪除
    • book=BookInfo.objects.get(name='jack').delete()
      • 返回刪除的個數和對象
  • 2,使用模型類結果集的delete()
    能夠進行多個刪除
    • BookInfo.objects.filter(name='jack').delete()
      • 返回刪除的個數和對象數據庫

        數據查詢

        基本條件查詢

  • 基本查詢
    • get
      • 獲取單個對象
    • all
      • 獲取全部對象
    • count
      • 返回對象的個數
  • 過濾查詢
    • filter
      • 根據條件獲取對象,返回結果集
    • exclude
      • 根據條件獲取不符合條件的對象的結果集
        • 語法:屬性名字__比較運算符=值
          • 比較運算符有
            • exact相等
              • BookInfo.objects.filter(pk__exact=1)
              • BookInfo.objects.filter(pk=1)
            • contains包含
              • BookInfo.objects.filter(name__contains='p')
            • endswith/startswith開頭/結尾
              • BookInfo.objects.filter(name__startswith='p')
            • isnull=True爲空
              • BookInfo.objects.filter(name__isnull=True)
            • in=[]範圍
              • BookInfo.objects.filter(id__in=[1,2,3])
            • gt大於
              lt小於
              gte大於等於
              lte小於等於
              • BookInfo.objects.filter(id__gt=4)
            • 日期查詢
              year
              mouth
              day
              week
              day
              hour
              minute
              second
              • BookInfo.objects.filter(pub_date__year__gt=1980)
    • get
      • 獲取單個對象,不是結果集,範圍查詢不能使用getdjango

        F和Q對象

  • F對象
    • F('')引號
      原理是:直接執行原生sql語句獲取值,能夠知足兩個屬性之間的比較
      • BookInfo.objects.filter(readcount__gt=F('commentcount'))
      • BookInfo.objects.filter(readcount__gt=F('commentcount')*2)
  • Q對象
    • Q()
      多個過濾器逐個調用
      • &且
        • BookInfo.objects.filter(Q(id__gt=2)&Q(id__lt=5))
        • BookInfo.objects.filter(id__gt=2,id__lt=5)
      • |或
        • BookInfo.objects.filter(Q(id__gt=2)|Q(age__lt=55))
      • ~非
        • 子主題 1
          • BookInfo.objects.filter(~Q(id__gt=2))緩存

            聚合函數和排序函數

  • 聚合函數
    • aggregate()過濾器調用聚合函數
      導入聚合函數:from django.db.models import Sum
      • Sum
        • BookInfo.objects.aggregate(Sum('readcount'))
          • 返回值:{‘read__count’:554}
          • Sum(' ')
      • Avg
      • Count
        • 能夠直接使用
          • BookInfo.objects.count()
      • Max
      • Min
  • 排序函數
    • order_by(' ')對查詢集進行排序
      返回的是一個仍是一個查詢集
      • BookInfo.objects.all().order_by('readcount')
        • BookInfo.objects.filter(id__gt=2).order_by('readcount')
      • 降序排序
        • BookInfo.objects.all().order_by('-readcount')函數

          查詢集

  • filter
  • all
  • exclude
  • order_by對象

    關聯查詢

  • 一對多
    • 多的一方定義外鍵
    • 由一到多查詢
      • 多對應的模型類名小寫_set
        • BookInfo.objects.get(id=1).peopleinfo_set.all()
    • 由多到一查詢
      • 外鍵
        • PeopleInfo.objects.get(id=1).bookblog

          關聯過濾查詢

  • 一對多
    • 多模型爲條件查一模型數據
      • BookInfo.objects.filter(peopleinfo__id=1)
    • 一模型做爲條件查多模型數據
      • PeopleInfo.objects.filter(book__id=1)排序

        特色

        惰性執行

        緩存

        限制查詢集,切片

  • BookInfo.objects.all()[0:2]get

    exists()

  • 判斷查詢結果中是否有數據,True,False

XMind: ZEN - Trial Version

相關文章
相關標籤/搜索