1. 程式人生 > 其它 >python django對資料表的增刪改查操作

python django對資料表的增刪改查操作

新增操作:
方式1:
book = BookInfo(title='西遊記',price=99)
book.save()

方式2:
BookInfo.objects.create(title='西遊記',price=99)

方式3:
BookInfo.objects.bulk_create(bookinfoList)


修改操作:
方式1:
book = BookInfo.objects.get(id=1)
book.name='西遊記'
book.save()

方式2:
BookInfo.objects.filter(name='西遊記').update(name='三國演義')


刪除操作:
方式1:
BookInfo.objects.get(id=1).delete()

方式2:
BookInfo.objects.filter(id=1).delete()


查詢操作:
BookInfo.objects.all()查詢所有結果 QuerySet
BookInfo.objects.count()查詢該表資料量

過濾查詢
book = BookInfo.objects.get(id=1)查詢id為1的一條資料 book--QuerySet book.title
BookInfo.objects.filter(title__exact='西遊記') 簡寫為(title='西遊記')
BookInfo.objects.filter(title__contains='遊')
BookInfo.objects.filter(title__startswith/endswith = '西') 以指定值開頭或結尾
以上運算子都區分大小寫,在這些運算子前加上i表示不區分大小寫,如iexact、icontains、istartswith、iendswith

BookInfo.objects.filter(title__isnull=False)
BookInfo.objects.filter(id__in=[1,2,4])

BookInfo.objects.filter(id__gt=3)
gt :大於 (greater then)
gte :大於等於 (greater then equal)
lt :小於 (less then)
lte :小於等於 (less then equal)

BookInfo.objects.exclude(id=3)

year、month、day、week_day、hour、minute、second:對日期時間型別的屬性進行運算
BookInfo.objects.filter(pub_data__year=1993)
BookInfo.objects.filter(pub_data__gt=date(1990,1,1))

查詢閱讀量大於等於2倍評論量的圖書
BookInfo.objects.filter(read_gte=F('comment')*2)

查詢閱讀量大於20,並且編號小於3的圖書
BookInfo.objects.filter(read_gt=20,id__lt=3)

Q物件可以使用&、|連線,&表示邏輯與,|表示邏輯或
查詢閱讀量大於20,或編號小於3的圖書,只能使用Q物件實現,Q物件前可以使用~操作符,表示非not
BookInfo.objects.filter(Q(read_gt=20) | Q(pk__lt=3))


使用aggregate()過濾器呼叫聚合函式。聚合函式包括:Avg(平均),Count(數量),Max(最大),Min(最小),Sum(求和),被定義在django.db.models中,aggregate的返回值是一個字典型別
BookInfo.objects.aggregate(Sum('read'))

排序
BookInfo.objects.all().order_by('read')
BookInfo.objects.all().order_by('-read')降序

分組查詢
User.objects.values('is_active').annotate(total=Count('id')) values分組的依據 annotate查詢的內容


關聯查詢
一對多:
book = BookInfo.objects.get(id=1)
herio = book.herioinfo_set.all()

多對一
herio = Herioinfo.objects.get(id=1)
book = herio.book
id = book_id

關聯過濾查詢
由多模型類條件查詢一模型類資料
BookInfo.objects.filter(heroinfo__name='孫悟空')

由一模型類條件查詢多模型類資料:
Herioinfo.objects.filter(book__read__gte=30)

查詢集 QuerySet 對查詢集可以再次呼叫過濾器進行過濾
all():返回所有資料。
filter():返回滿足條件的資料。
exclude():返回滿足條件之外的資料。
order_by():對結果進行排序。

建立查詢集不會訪問資料庫,直到呼叫資料時,才會訪問資料庫,呼叫資料的情況包括迭代、序列化、與if合用
使用同一個查詢集,第一次使用時會發生資料庫的查詢,然後Django會把結果快取下來,再次使用這個查詢集時會使用快取的資料,減少了資料庫的查詢次數

生命很短,請讓生活更精彩一些!