1. 程式人生 > 其它 >08Django實現資料表資料插入(建立Model例項)

08Django實現資料表資料插入(建立Model例項)

Django 為建立 Model 例項提供了兩種方法,一種是直接呼叫 Model 的 save 方法,另一種是通過物件管理器(objects Manager) 的 create 方法。這種中方法都可以實現建立 Model 例項物件。下面我們使用 Django shell 互動環境依次對這兩種方法進行解析。

Django shell 是 Django 提供一種互動環境,類似於 Python shell,開發人員可直接通過 shell 環境 與 Django 專案進行互動,它一種很實用的工具。

1. save方法建立Model例項

在 cmd 命令列進入專案 manage.py 目錄下,然後使用如下命令進入 Django shell 環境。

python manage.py shell

然後建立 Model 例項,使用 save() 方法儲存資料,如下所示:

  1. from index.models import Book #匯入相關model類
  2. #建立Book例項化物件
  3. book=Book(title="Python",public="a",price="59.00",retail_price="59.00")
  4. book.save()# 呼叫save方法進行儲存
  5. book=Book(title="Flask",public="b",price="39.00",retail_price="39.00")
  6. book.save()# 呼叫save方法進行儲存
  7. book=Book(title="Django",public="b",price="40.00",retail_price="40.00")
  8. book.save()#

最後呼叫 save 方法進行儲存。通過上述程式碼,我們就在資料庫中添加了三條有關書籍的記錄。

建立 Book 例項,其實就是填充有關 Model 例項的各個欄位,如果設定了預設值或者有允許為 null 的欄位可以不填,最後呼叫 save() 儲存例項(該方法沒有返回值)。在 save() 執行以後,Django 會將 book例項化資料儲存到資料庫中。

注意,每建立一條資料都需要呼叫一次 save() 方法,我們通過檢視資料庫可以得知資料資訊已經儲存完畢。如下所示:

mysql> select * from index_book;
+----+--------+--------+-------+--------------+
| id | title  | public | price | retail_price |
+----+--------+--------+-------+--------------+
|  1 | Python | a      | 59.00 |        59.00 |
|  2 | Flask  | b      | 39.00 |        39.00 |
|  3 | Django | b      | 40.00 |        40.00 |
+----+--------+--------+-------+--------------+
3 rows in set (0.00 sec)

避坑提示,若在例項化資料物件的過程中,Django shell 出現以這樣的報錯資訊:

InternalError: (1366, "Incorrect string value: '\\xE8\\xAF\\xAD\\xE8\\xA8\\x80...' for column 'public' at row 1")

說明我們新增的 public 欄位的資訊超過可欄位本身的最大長度限制,即 manx_length=50。解決方法是將欄位 max_length 值變大然後需要重新執行資料庫遷移的操作,或者將你輸入的資訊縮短從而符合其規定的長度。

save() 方法還可以儲存已有物件更改後的資訊,比如:

  1. book.title="JavaScript"
  2. book.save()

2. create方法建立Model例項

除了以上方法外,我們也可以使用管理器物件提供的 create() 方法,使用方法如下所示:

純文字複製
  1. In [1]: Book.objects.create(title="Java",public="a",price="30.00",retail_price="30.00")
  2. Out[1]: <Book: title:Java public:a price:30.00> #執行create方法存在返回值

然後繼續插入如下資料:

  1. from index.models import Book
  2. In [2]: Book.objects.create(title="MySQL",public="c",price="35.00",retail_price="35.00")
  3. Out[2]: <Book: title:MySQL public:c price:35.00>
  4. In [3]: Book.objects.create(title="C#",public="a",price="45.00",retail_price="40.00")
  5. Out[3]: <Book: title:C# public:a price:45.00>
  6. In [4]: Book.objects.create(title="Redis",public="c",price="25.00",retail_price="25.00")
  7. Out[4]: <Book: title:Redis public:c price:25.00>

這種建立 Model 例項物件的過程比較簡單,create 執行之後就在資料庫中插入了一條記錄,這也是我們推薦使用的方法。最後訪問資料庫可以看到最新插入的資料記錄:

mysql> select * from index_book;
+----+--------+--------+-------+--------------+
| id | title  | public | price | retail_price |
+----+--------+--------+-------+--------------+
|  1 | Python | a      | 59.00 |        59.00 |
|  2 | Flask  | b      | 39.00 |        39.00 |
|  3 | Django | b      | 40.00 |        40.00 |
|  4 | Java   | a      | 30.00 |        30.00 |
|  5 | MySQL  | c      | 35.00 |        35.00 |
|  6 | C#     | a      | 45.00 |        40.00 |
|  7 | Redis  | c      | 25.00 |        25.00 |
+----+--------+--------+-------+--------------+

本節我們完成了向資料表插入資料記錄的操作,不管是在 shell 環境下,還是專案的程式碼中都可以使用以上兩種方法實現建立 Model 例項。後續章節會將涉及 Django 表的資料查詢,我們還會用到本節內容。