欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Django中更新多個對象數(shù)據(jù)與刪除對象的方法

 更新時間:2015年07月17日 11:42:52   投稿:goldensun  
這篇文章主要介紹了Django中更新多個對象數(shù)據(jù)與刪除對象的方法,Django是Python重多各色框架中人氣最高的一個,需要的朋友可以參考下

更新多個對象

例如說我們現(xiàn)在想要將Apress Publisher的名稱由原來的”Apress”更改為”Apress Publishing”。若使用save()方法,如:

>>> p = Publisher.objects.get(name='Apress')
>>> p.name = 'Apress Publishing'
>>> p.save()

這等同于如下SQL語句:

SELECT id, name, address, city, state_province, country, website
FROM books_publisher
WHERE name = 'Apress';

UPDATE books_publisher SET
  name = 'Apress Publishing',
  address = '2855 Telegraph Ave.',
  city = 'Berkeley',
  state_province = 'CA',
  country = 'U.S.A.',
  website = 'http://www.apress.com'
WHERE id = 52;

(注意在這里我們假設(shè)Apress的ID為52)

在這個例子里我們可以看到Django的save()方法更新了不僅僅是name列的值,還有更新了所有的列。 若name以外的列有可能會被其他的進(jìn)程所改動的情況下,只更改name列顯然是更加明智的。 更改某一指定的列,我們可以調(diào)用結(jié)果集(QuerySet)對象的update()方法: 示例如下:

>>> Publisher.objects.filter(id=52).update(name='Apress Publishing')

與之等同的SQL語句變得更高效,并且不會引起競態(tài)條件。

UPDATE books_publisher
SET name = 'Apress Publishing'
WHERE id = 52;

update()方法對于任何結(jié)果集(QuerySet)均有效,這意味著你可以同時更新多條記錄。 以下示例演示如何將所有Publisher的country字段值由'U.S.A'更改為'USA':

>>> Publisher.objects.all().update(country='USA')
2

update()方法會返回一個整型數(shù)值,表示受影響的記錄條數(shù)。 在上面的例子中,這個值是2。
刪除對象

刪除數(shù)據(jù)庫中的對象只需調(diào)用該對象的delete()方法即可:

>>> p = Publisher.objects.get(name="O'Reilly")
>>> p.delete()
>>> Publisher.objects.all()
[<Publisher: Apress Publishing>]

同樣我們可以在結(jié)果集上調(diào)用delete()方法同時刪除多條記錄。這一點與我們上一小節(jié)提到的update()方法相似:

>>> Publisher.objects.filter(country='USA').delete()
>>> Publisher.objects.all().delete()
>>> Publisher.objects.all()
[]

刪除數(shù)據(jù)時要謹(jǐn)慎! 為了預(yù)防誤刪除掉某一個表內(nèi)的所有數(shù)據(jù),Django要求在刪除表內(nèi)所有數(shù)據(jù)時顯示使用all()。 比如,下面的操作將會出錯:

>>> Publisher.objects.delete()
Traceback (most recent call last):
 File "<console>", line 1, in <module>
AttributeError: 'Manager' object has no attribute 'delete'

而一旦使用all()方法,所有數(shù)據(jù)將會被刪除:

>>> Publisher.objects.all().delete()

如果只需要刪除部分的數(shù)據(jù),就不需要調(diào)用all()方法。再看一下之前的例子:

>>> Publisher.objects.filter(country='USA').delete()


相關(guān)文章

最新評論