Django models 的增刪改查
阿新 • • 發佈:2018-01-03
sql ddr div filter 裏的 -- 篩選條件 叠代 order
增
from app01.models import * #create方式一: Author.objects.create(name=‘Alvin‘) #create方式二: Author.objects.create(**{"name":"alex"}) #推薦使用這種 #save方式一: author=Author(name="alvin") author.save() #save方式二: author=Author() author.name="alvin" author.save()
#一對多(ForeignKey): #方式一: 由於綁定一對多的字段,比如publish,存到數據庫中的字段名叫publish_id,所以我們可以直接給這個 # 字段設定對應值: Book.objects.create(title=‘php‘, publisher_id=2, #這裏的2是指為該book對象綁定了Publisher表中id=2的行對象 publication_date=‘2017-7-7‘, price=99) #方式二: # <1> 先獲取要綁定的Publisher對象: pub_obj=Publisher(name=‘河大出版社‘,address=‘保定‘,city=‘保定‘, state_province=‘河北‘,country=‘China‘,website=‘http://www.hbu.com‘) OR pub_obj=Publisher.objects.get(id=1) # <2>將 publisher_id=2 改為 publisher=pub_obj#多對多(ManyToManyField()): author1=Author.objects.get(id=1) author2=Author.objects.filter(name=‘alvin‘)[0] book=Book.objects.get(id=1) book.authors.add(author1,author2) #等同於: book.authors.add(*[author1,author2]) book.authors.remove(*[author1,author2]) #------------------- book=models.Book.objects.filter(id__gt=1) authors=models.Author.objects.filter(id=1)[0] authors.book_set.add(*book) authors.book_set.remove(*book) #------------------- book.authors.add(1) book.authors.remove(1) authors.book_set.add(1) authors.book_set.remove(1) #註意: 如果第三張表是通過models.ManyToManyField()自動創建的,那麽綁定關系只有上面一種方式 # 如果第三張表是自己創建的: class Book2Author(models.Model): author=models.ForeignKey("Author") Book= models.ForeignKey("Book") # 那麽就還有一種方式: author_obj=models.Author.objects.filter(id=2)[0] book_obj =models.Book.objects.filter(id=3)[0] s=models.Book2Author.objects.create(author_id=1,Book_id=2) s.save() s=models.Book2Author(author=author_obj,Book_id=1) s.save()
刪
Book.objects.filter(id=1).delete()
>>> (3, {‘app01.Book_authors‘: 2, ‘app01.Book‘: 1})
#正向 book = models.Book.objects.filter(id=1) #刪除第三張表中和女孩1關聯的所有關聯信息 book.author.clear() #清空與book中id=1 關聯的所有數據 book.author.remove(2) #可以為id book.author.remove(*[1,2,3,4]) #可以為列表,前面加* #反向 author = models.Author.objects.filter(id=1) author.book_set.clear() #清空與boy中id=1 關聯的所有數據
改
#---------------- update方法直接設定對應屬性---------------- models.Book.objects.filter(id=3).update(title="PHP") ##sql: ##UPDATE "app01_book" SET "title" = ‘PHP‘ WHERE "app01_book"."id" = 3; args=(‘PHP‘, 3) #--------------- save方法會將所有屬性重新設定一遍,效率低----------- obj=models.Book.objects.filter(id=3)[0] obj.title="Python" obj.save() # SELECT "app01_book"."id", "app01_book"."title", "app01_book"."price", # "app01_book"."color", "app01_book"."page_num", # "app01_book"."publisher_id" FROM "app01_book" WHERE "app01_book"."id" = 3 LIMIT 1; # # UPDATE "app01_book" SET "title" = ‘Python‘, "price" = 3333, "color" = ‘red‘, "page_num" = 556, # "publisher_id" = 1 WHERE "app01_book"."id" = 3;
查
# 查詢相關API: # <1>filter(**kwargs): 它包含了與所給篩選條件相匹配的對象 # <2>all(): 查詢所有結果 # <3>get(**kwargs): 返回與所給篩選條件相匹配的對象,返回結果有且只有一個,如果符合篩選條件的對象超過一個或者沒有都會拋出錯誤。 #-----------下面的方法都是對查詢的結果再進行處理:比如 objects.filter.values()-------- # <4>values(*field): 返回一個ValueQuerySet——一個特殊的QuerySet,運行後得到的並不是一系列 model的實例化對象,而是一個可叠代的字典序列 # <5>exclude(**kwargs): 它包含了與所給篩選條件不匹配的對象 # <6>order_by(*field): 對查詢結果排序 # <7>reverse(): 對查詢結果反向排序 # <8>distinct(): 從返回結果中剔除重復紀錄 # <9>values_list(*field): 它與values()非常相似,它返回的是一個元組序列,values返回的是一個字典序列 # <10>count(): 返回數據庫中匹配查詢(QuerySet)的對象數量。 # <11>first(): 返回第一條記錄 # <12>last(): 返回最後一條記錄 # <13>exists(): 如果QuerySet包含數據,就返回True,否則返回False。
Django models 的增刪改查