Django 中數據庫的操作,多種查詢方法

增加

增加數據有兩種方法。

  1. save

    通過創建模型類對象,執行對象的save()方法保存到數據庫中。

    from book.models import BookInfo,PeopleInfo
    book = BookInfo(
            name='python入門',
            pub_date='2010-1-1'
        )
    book.save()
    book
    
    <BookInfo: python入門>
    

    在這裏插入圖片描述

  2. create

    通過模型類.objects.create()保存。

    PeopleInfo.objects.create(
            name='itheima',
            book=book
        )
    
    <PeopleInfo: itheima>
    

修改

修改更新有兩種方法

  1. save

    修改模型類對象的屬性,然後執行save()方法

    person = PeopleInfo.objects.get(name='itheima')
    person.name = 'itcast'
    person.save()
    person
    
    <PeopleInfo: itcast>
    
  2. update

    使用模型類.objects.filter().update(),會返回受影響的行數

    PeopleInfo.objects.filter(name='itcast').update(name='H_sen')
    1
    

刪除

刪除有兩種方法

  1. 模型類對象delete
person = PeopleInfo.objects.get(name='H_sen')
person.delete()

(1, {'book.PeopleInfo': 1})
  1. 模型類.objects.filter().delete()
BookInfo.objects.filter(name='python入門').delete()

(1, {'book.BookInfo': 1, 'book.PeopleInfo': 0})


查詢

基本查詢

  • get 查詢單一結果,如果不存在會拋出模型類.DoesNotExist異常。

  • all 查詢多個結果。

  • count 查詢結果數量。

BookInfo.objects.get(id=1)
<BookInfo: 射鵰英雄傳>

BookInfo.objects.get(pk=2)
<BookInfo: 天龍八部>

BookInfo.objects.get(pk=20)
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/home/python/.virtualenvs/py3_django_1.11/lib/python3.5/site-packages/django/db/models/manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/home/python/.virtualenvs/py3_django_1.11/lib/python3.5/site-packages/django/db/models/query.py", line 380, in get
    self.model._meta.object_name
book.models.DoesNotExist: BookInfo matching query does not exist.


BookInfo.objects.all()
<QuerySet [<BookInfo: 射鵰英雄傳>, <BookInfo: 天龍八部>, <BookInfo: 笑傲江湖>, <BookInfo: 雪山飛狐>]>

BookInfo.objects.count()
4

過濾查詢

實現SQL中的where功能,包括

  • filter過濾出多個結果

  • exclude排除掉符合條件剩下的結果

  • get過濾單一結果

對於過濾條件的使用,上述三個方法相同,故僅以filter進行講解。

過濾條件的表達語法如下:

屬性名稱__比較運算符=# 屬性名稱和比較運算符間使用兩個下劃線,所以屬性名不能包括多個下劃線
查詢編號爲1的圖書
查詢書名包含'湖'的圖書
查詢書名以'部'結尾的圖書
查詢書名爲空的圖書
查詢編號爲135的圖書
查詢編號大於3的圖書
查詢1980年發表的圖書
查詢199011日後發表的圖書

1. 相等

exact:表示判等。

例:查詢編號爲1的圖書。

BookInfo.objects.filter(id__exact=1)
可簡寫爲:
BookInfo.objects.filter(id=1)

2. 模糊查詢

contains:是否包含。

說明:如果要包含%無需轉義,直接寫即可。

例:查詢書名包含’傳’的圖書。

BookInfo.objects.filter(name__contains='傳')
<QuerySet [<BookInfo: 射鵰英雄傳>]>

startswith、endswith:以指定值開頭或結尾。

例:查詢書名以’部’結尾的圖書

BookInfo.objects.filter(name__endswith='部')
<QuerySet [<BookInfo: 天龍八部>]>

以上運算符都區分大小寫,在這些運算符前加上i表示不區分大小寫,
如iexact、icontains、istartswith、iendswith.

3. 空查詢

isnull:是否爲null。

例:查詢書名爲空的圖書。

BookInfo.objects.filter(name__isnull=True)
<QuerySet []>

4. 範圍查詢

in:是否包含在範圍內。

例:查詢編號爲1或3或5的圖書

BookInfo.objects.filter(id__in=[1,35])
<QuerySet [<BookInfo: 射鵰英雄傳>, <BookInfo: 笑傲江湖>]>

5. 比較查詢

  • gt大於 (greater then)

  • gte大於等於 (greater then equal)

  • lt小於 (less then)

  • lte小於等於 (less then equal)

例:查詢編號大於3的圖書

BookInfo.objects.filter(id__gt=3)

不等於的運算符,使用exclude()過濾器。

例:查詢編號不等於3的圖書

BookInfo.objects.filter(id__gt=3)
<QuerySet [<BookInfo: 雪山飛狐>]>

6. 日期查詢

year、month、day、week_day、hour、minute、second:對日期時間類型的屬性進行運算。

例:查詢1980年發表的圖書。

BookInfo.objects.filter(pub_date__year=1980)
<QuerySet [<BookInfo: 射鵰英雄傳>]>

例:查詢1990年1月1日後發表的圖書。

BookInfo.objects.filter(pub_date__gt='1990-1-1')
<QuerySet [<BookInfo: 笑傲江湖>]>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章