Django ORM 操做2 增刪改

增刪改

增長

表對象直接增長方式

Frank_obj = models.Student(name ="海東",course="python",birth="2000-9-9",fenshu=80)
Frank_obj.save()

create 增長方式

單表增長 直接帶值便可python

 models.Student.objects.create(name ="海燕",course="python",birth="1995-5-9",fenshu=88)

含有一對多,一對一字段的添加要傳入對應對象django

  ps:create 方法的返回值爲被建立的對象 app

pub_obj = models.Publish.objects.filter(name="人民出版社")[0]
print(pub_obj)
models.Book.objects.create(title = "簡愛",publishDdata="2000-6-6",price="222",publish=pub_obj)

含有一對多,一對一字段,在知道關聯字段的值前提下也能夠直接帶值性能

models.Book.objects.create(title="追風箏的人",publishDdata="2015-5-8",price="111",publish_id=1)

 add 方式

含有 多對多 字段時,依舊是要傳入對象,用 add 添加綁定關係
spa

# 先建立一本書:
    pub_obj=models.Publish.objects.filter(name="萬能出版社").first()
    book_obj = models.Book.objects.create(title="醉玲瓏",publishDdata="2015-4-10",price="222",publish=pub_obj)
    
# #經過做者的名字django默認找到id haiyan_obj = models.Author.objects.filter(name="haiyan")[0] egon_obj = models.Author.objects.filter(name="egon")[0] xiaoxiao_obj = models.Author.objects.filter(name="xiaoxiao")[0]
# 綁定多對多的關係、 book_obj.authorlist.add(haiyan_obj, egon_obj, xiaoxiao_obj)

含有 多對多 字段,add 支持傳入序列而後打散的方式綁定code

   pub_obj = models.Publish.objects.filter(name="萬能出版社").first()
    book_obj = models.Book.objects.create(title="醉玲瓏", publishDdata="2015-4-10", price="222", publish=pub_obj)
    authers = models.Author.objects.all()

# 綁定多對多關係 book_obj.authorlist.add(*authers)

update_or_create 方式

有的話更新,沒有的話就建立對象

UserToken.objects.update_or_create(user=user_obj,defaults={"token":token})

bulk_create() 方式

Django model中數據批量導入blog

常規方法,影響性能token

for i in resultlist:
    p = Account(name=i) 
    p.save()

批量方法,更加方便rem

querysetlist=[]
for i in resultlist:
    querysetlist.append(Account(name=i))        
Account.objects.bulk_create(querysetlist)

修改

對象修改

對象直接 對象.屬性 賦值修改,修改後須要 save()

book_obj = models.Book.objects.first()
book_obj.title = "lalal"
book_obj.save()

queryset 對象 update 修改

queryset 對象使用 update(屬性="值")方法更改,不須要 save() 

  ps:update 返回值爲受影響的行數

book_obj = models.Book.objects.filter(id=1)
book_obj.update(title="keke")
print(book_obj.values("title")[0])  # {'title': 'keke'}

多對多字段修改,set 方法 修改管理字段

book_obj = models.Book.objects.first()
book_obj.authors.set([2, 3])

刪除

delete 方法

刪除方法就是 delete(),它運行時當即刪除對象而不返回任何值。

  ps: delete方法刪除是具備關聯性的,默認會所有刪除,能夠在管理字段經過 on_delete 屬性定製

# 刪除數據
models.Student.objects.filter(nid=id).delete()

刪除能夠一次性刪除多條記錄

Entry.objects.filter(pub_date__year=2005).delete()

 remove 和 clean 方法

remove 和 clean 方法僅使用於在多對多字段中解除關係所用

# 解除多對多的關係(remove)
book_obj=models.Book.objects.filter(title="醉玲瓏").last()  # 找到書對象
authers=models.Author.objects.filter(id__lt=3)   # 找到符合條件的做者對象
book_obj.authorlist.remove(*authers)  # 由於清除的是多條,得加個*
# 清除關係方法(clear)
book_obj= models.Book.objects.filter(title="紅樓夢")
for book_obj_item in book_obj: # 把全部紅樓夢的都給清空了
  book_obj_item.authorlist.clear()

區別:

  remove:得吧要清除的數據篩選出來,而後移除  clear:不用查,直接把數據都清空

相關文章
相關標籤/搜索