# 第六節:增刪改查操作
# 模型的操作:
在`ORM`框架中,所有模型相關的操作,比如添加/刪除等。其實都是映射到數據庫中一條數據的操作。因此模型操作也就是數據庫表中數據的操作。
## 添加一個模型到數據庫中:
添加模型到數據庫中。首先需要創建一個模型。創建模型的方式很簡單,就跟創建普通的`Python`對象是一摸一樣的。在創建完模型之后,需要調用模型的`save`方法,這樣`Django`會自動的將這個模型轉換成`sql`語句,然后存儲到數據庫中。示例代碼如下:
```
<pre class="calibre12">```
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Book</span><span class="hljs-params">(models.Model)</span>:</span>
name = models.CharField(max_length=<span class="hljs-params">20</span>,null=<span class="hljs-keyword">False</span>)
desc = models.CharField(max_length=<span class="hljs-params">100</span>,name=<span class="hljs-string">'description'</span>,db_column=<span class="hljs-string">"description1"</span>)
pub_date = models.DateTimeField(auto_now_add=<span class="hljs-keyword">True</span>)
book = Book(name=<span class="hljs-string">'三國演義'</span>,desc=<span class="hljs-string">'三國英雄!'</span>)
book.save()
```
```
## 查找數據:
查找數據都是通過模型下的`objects`對象來實現的。
### 查找所有數據:
要查找`Book`這個模型對應的表下的所有數據。那么示例代碼如下:
```
<pre class="calibre12">```
books = Book.objects.all()
```
```
以上將返回`Book`模型下的所有數據。
### 數據過濾:
在查找數據的時候,有時候需要對一些數據進行過濾。那么這時候需要調用`objects`的`filter`方法。實例代碼如下:
```
<pre class="calibre12">```
books = Book.objects.filter(name=<span class="hljs-string">'三國演義'</span>)
> [<Book:三國演義>]
<span class="hljs-title"># 多個條件</span>
books = Book.objects.filter(name=<span class="hljs-string">'三國演義'</span>,desc=<span class="hljs-string">'test'</span>)
```
```
調用`filter`,會將所有滿足條件的模型對象都返回。
### 獲取單個對象:
使用`filter`返回的是所有滿足條件的結果集。有時候如果只需要返回第一個滿足條件的對象。那么可以使用`get`方法。示例代碼如下:
```
<pre class="calibre12">```
book = Book.objects.get(name=<span class="hljs-string">'三國演義'</span>)
> <Book:三國演義>
```
```
當然,如果沒有找到滿足條件的對象,那么就會拋出一個異常。而`filter`在沒有找到滿足條件的數據的時候,是返回一個空的列表。
### 數據排序:
在之前的例子中,數據都是無序的。如果你想在查找數據的時候使用某個字段來進行排序,那么可以使用`order_by`方法來實現。示例代碼如下:
```
<pre class="calibre12">```
books = Book.objects.order_by(<span class="hljs-string">"pub_date"</span>)
```
```
以上代碼在提取所有書籍的數據的時候,將會使用`pub_date`從小到大進行排序。如果想要進行倒序排序,那么可以在`pub_date`前面加一個負號。實例代碼如下:
```
<pre class="calibre12">```
books = Book.objects.order_by(<span class="hljs-string">"-pub_date"</span>)
```
```
## 修改數據:
在查找到數據后,便可以進行修改了。修改的方式非常簡單,只需要將查找出來的對象的某個屬性進行修改,然后再調用這個對象的`save`方法便可以進行修改。示例代碼如下:
```
<pre class="calibre12">```
<span class="hljs-keyword">from</span> datetime <span class="hljs-keyword">import</span> datetime
book = Book.objects.get(name=<span class="hljs-string">'三國演義'</span>)
book.pub_date = datetime.now()
book.save()
```
```
## 刪除數據:
在查找到數據后,便可以進行刪除了。刪除數據非常簡單,只需要調用這個對象的`delete`方法即可。實例代碼如下:
```
<pre class="calibre12">```
book = Book.objects.get(name=<span class="hljs-string">'三國演義'</span>)
book.delete()
```
```
- Introduction
- 第一章:學前準備
- 第一節:虛擬環境
- 第二節:準備工作
- 第三節:Django介紹
- 第四節:URL組成部分
- 第二章:URL與視圖
- 第一節:第一個Django項目
- 第二節:視圖與URL分發器
- 第三章:模板
- 第一節:模板介紹
- 第二節:模板變量
- 第三節:常用標簽
- 第四節:常用過濾器
- 第五節:自定義過濾器
- 第七節:模版結構優化
- 第八節:加載靜態文件
- 第四章:數據庫
- 第一節:MySQL相關軟件
- 第二節:數據庫操作
- 第三節:ORM模型
- 第四節:模型常用字段
- 第五節:外鍵和表關系
- 第六節:增刪改查操作
- 第七節:查詢操作
- 第八節:QuerySet API
- 第九節:ORM模型遷移
- 第十節:ORM作業
- 第十一節:ORM作業參考答案
- 第十二節:Pycharm連接數據庫
- 第五章:視圖高級
- 第一節:限制請求method
- 第二節:頁面重定向
- 第三節:HttpRequest對象
- 第四節:HttpResponse對象
- 第五節:生成CSV文件
- 第六節:類視圖
- 第七節:錯誤處理
- 第六章:表單
- 第一節:表單概述
- 第二節:用表單驗證數據
- 第三節:ModelForm
- 第四節:文件上傳
- 第七章:cookie和session
- 第八章:上下文處理器和中間件
- 第一節:上下文處理器
- 第二節:中間件
- 第九章:安全
- 第一節:CSRF攻擊
- 第二節:XSS攻擊
- 第三節:點擊劫持攻擊
- 第四節:SQL注入
- 第十章:信號
- 第一節:什么是信號
- 第十一章:驗證和授權
- 第一節:概述
- 第二節:用戶對象
- 第三節:權限和分組
- 第十二章:Admin系統
- 第十三章:Django的緩存
- 第十四章:memcached
- 第十五章:Redis