1. 程式人生 > >在Django中對資料的增刪改查

在Django中對資料的增刪改查

1.增加資料

    1.Entry.objects.creat(屬性=值,屬性=值)
        返回值:
            插入成功:則返回建立好的實體物件
            插入失敗:則返回None

    2.建立一個save的物件,並通過save()進行儲存
      obj = Entry(屬性=值,屬性=值)
      obj.屬性 = 值
      obj.save()
      無返回值,儲存成功後,obj會重新賦值
    3.通過字典建立Entry物件,並通過save()進行儲存

        dic= {
        "屬性1":"值一"
        "屬性2":"值二"
        }
        obj = Entry(**dic)
        obj.save() 

2.查詢資料(重點)

    通過Entry.objects呼叫查詢介面函式
    Entry.objects.all()
    Entry.objects提供了該實體的所有的資料的查詢
    所有的介面函式都可以通過一個query屬性來得到所對應的sql語句
        Entry.objects.all().query
        1.獲取所有查詢結果的方法
            方法:all()
            用法:Entry.object.all()
            返回:QuerySet(查詢結果集,本質是一個封裝了若干物件的列表)

            SELECT `index_author`.`id`, `index_author`.`name`, `index_author`.`age`, `index_author`.`email`, `index_author`.`isActive` FROM `index_author`


            <QuerySet [<Author: Author object>, <Author: Author object>, <Author: Author object>, 
            <Author: Author object>]>
        2.查詢返回指定列
            方法:values() | values('列名1','列名2')
            作用:查詢表中資料的部分列,封裝到字典中,在封裝到QuerySet中
            返回:QuerySet(查詢結果集,本質就是一個封裝了若干字典的列表
        3.查詢返回指定列
            方法:

            _list()
            作用:將資料封裝到元組中再封裝到列表中
        4.排序方法
            方法:order_by()
            語法:Entry.objects.order_by('列1',"列2")
                預設是升序排序,列名前加一個-,表示降序排序
        5.查詢只返回一條資料
            方法:get(條件)
            注意:
                該方法只適用於只能查詢出一條結果的場合
                如果查詢多餘一條資料或沒有查詢出結果都會丟擲結果
            返回單個實體
        6.根據條件查詢部分行
            方法:filter(條件)
            ex:
                1.查詢Author實體中id = 1 的資訊
                    author = Author.objects.filter(id=1)
                非等值條件查詢使用查詢謂詞Filed Lookups
                語法:Entry.objects.filter(屬性__查詢謂詞 = 值)
                注意:
                    1.每個查詢謂詞都是一個獨立的功能條件
                        __exact:等值條件判斷
                        __gt:大於條件判斷
                        __year:得到日期中的年份再進行進一步判斷
                        __contains:模糊查詢'%xxx%'
                        __range:模糊查詢 between and
                        ... ...
                    2.所有支援條件查詢的位置處都支援查詢謂詞
                        filter(),get(),exclude()

        7.對條件取反
            方法:exclude(條件)
            ex:
                Author.objects.exclude(id=1)
                select * from index_author where not(id=1)

        8.聚合查詢(不帶分組)
            方法:aggregate(列明= 聚合函式('列'))
            ex:
                Author.objects.aggregate(sumAge=Sum'age'))

            聚合函式:
                1.Avg():平均值
                2.Count():數量
                3.Sum():求和
                4.Min():求最小值
                5.Max():求最大值
        9.聚合查詢(帶分組)
            方法:annotate(名=聚合函式('列'))
            ex:
                按id分組查詢平均年齡
                Author.object.values('id').annotate(avgAge=Avg('age')).all()


        集合where,分組查詢,having於一體的查詢介面
        Author.objects
        .filter(id__gte=3) where子句
        .values('isActive') group by

3.修改資料

    1.修改單個實體
        1.查
            通過get()查詢出要修改的實體
        2.改
            通過實體物件的屬性值
        3.儲存
            通過實體物件的save()方法儲存資料庫

    2.批量修改資料
        呼叫QuerySet的Update(屬性=值,屬性=值)實現批量修改

4.刪除資料

    呼叫實體物件/查詢結果集的delete() 完成刪除
    1.刪除單個物件
        au = Author.objects.get(id=1)
        au.delete()
    2.批量刪除
        aulist = Author.objects.all()
        aulist.delete