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() 方法儲存資料,如下所示:
- from index.models import Book #匯入相關model類
- #建立Book例項化物件
- book=Book(title="Python",public="a",price="59.00",retail_price="59.00")
- book.save()# 呼叫save方法進行儲存
- book=Book(title="Flask",public="b",price="39.00",retail_price="39.00")
- book.save()# 呼叫save方法進行儲存
- book=Book(title="Django",public="b",price="40.00",retail_price="40.00")
- 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() 方法還可以儲存已有物件更改後的資訊,比如:
- book.title="JavaScript"
- book.save()
2. create方法建立Model例項
除了以上方法外,我們也可以使用管理器物件提供的 create() 方法,使用方法如下所示:
純文字複製
- In [1]: Book.objects.create(title="Java",public="a",price="30.00",retail_price="30.00")
- Out[1]: <Book: title:Java public:a price:30.00> #執行create方法存在返回值
然後繼續插入如下資料:
- from index.models import Book
- In [2]: Book.objects.create(title="MySQL",public="c",price="35.00",retail_price="35.00")
- Out[2]: <Book: title:MySQL public:c price:35.00>
- In [3]: Book.objects.create(title="C#",public="a",price="45.00",retail_price="40.00")
- Out[3]: <Book: title:C# public:a price:45.00>
- In [4]: Book.objects.create(title="Redis",public="c",price="25.00",retail_price="25.00")
- 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 表的資料查詢,我們還會用到本節內容。