django查詢集query_set API(Ⅰ)

(import keyword 

print keyword.kwlist)

打印所有關鍵字

查詢集:

  1. Person.objects.all()

  2. Person.objects.all()[:10] 切片操作,獲取10個人,不支持負索引,切片可以節約內存

  3. Person.objects.get(name=name)

  4. Person.objects.filter(name="abc")  # 等於Person.objects.filter(name__exact="abc") 名稱嚴格等於 "abc" 的人

  5. Person.objects.filter(name__iexact="abc")  # 名稱爲 abc 但是不區分大小寫,可以找到 ABC, Abc, aBC,這些都符合條件

  6. Person.objects.filter(name__contains="abc")  # 名稱中包含 "abc"的人

  7. Person.objects.filter(name__icontains="abc")  #名稱中包含 "abc",且abc不區分大小寫

  8. Person.objects.filter(name__regex="^abc")  # 正則表達式查詢

  9. Person.objects.filter(name__iregex="^abc")  # 正則表達式不區分大小寫

  10. Person.objects.exclude(name__contains="WZ")  # 排除包含 WZ 的Person對象

  11. Person.objects.filter(name__contains="abc").exclude(age=23)  # 找出名稱含有abc, 但是排除年齡是23歲的

創建集:

# 方法 1

Author.objects.create(name="WeizhongTu", email="[email protected]")

# 方法 2

twz = Author(name="WeizhongTu", email="[email protected]")

twz.save()

# 方法 3

twz = Author()

twz.name="WeizhongTu"

twz.email="[email protected]"

twz.save()

# 方法 4,首先嚐試獲取,不存在就創建,可以防止重複

Author.objects.get_or_create(name="WeizhongTu", email="[email protected]")

# 返回值(object, True/False)

刪除集:

Person.objects.filter(name__contains="abc").delete() # 刪除 名稱中包含 "abc"的人

如果寫成 

people = Person.objects.filter(name__contains="abc")

people.delete()

效果也是一樣的,Django實際只執行一條 SQL 語句。

更新集:

批量更新,適用於 .all()  .filter()  .exclude() 等後面 (危險操作,正式場合操作務必謹慎)

Person.objects.filter(name__contains="abc").update(name='xxx'# 名稱中包含 "abc"的人 都改成 xxx

Person.objects.all().delete() # 刪除所有 Person 記錄

單個 object 更新,適合於 .get(), get_or_create(), update_or_create() 等得到的 obj,和新建很類似。

twz = Author.objects.get(name="WeizhongTu")

twz.name="WeizhongTu"

twz.email="[email protected]"

twz.save()  # 最後不要忘了保存!!!

排序集:

Author.objects.all().order_by('name')

Author.objects.all().order_by('-name'# 在 column name 前加一個負號,可以實現倒序

重複問題:QuerySet 重複的問題,使用 .distinct() 去重

 

qs1 = Pathway.objects.filter(label__name='x')

qs2 = Pathway.objects.filter(reaction__name='A + B >> C')

qs3 = Pathway.objects.filter(inputer__name='WeizhongTu')

# 合併到一起

qs = qs1 | qs2 | qs3

這個時候就有可能出現重複的

# 去重方法

qs = qs.distinct()

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章