iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 9
0
Modern Web

From Django 1.11 to Django 2.1 系列 第 9

Day9 : 使用 Shell 創建資料

Day8 的內容,我們可以透過 admin 在後台方便地管理資料

除此之外,我們也可以透過 Shell 來管理這一些資料,因為一旦我們創建好了這些資料模型(Models),Django便會提供我進行 Create、Retrieve、Update及Delete 的方式來操作資料庫,也就是所謂的CRUD

正確來說是 Create、Read、Update及Delete,但是 Retrieve 跟 Read 想要表達的意思其實很相近,因此只要了解CRUD主要涵義就是 新增、讀取、更新、刪除 就好

進入 Shell 操作 資料庫的方式也很簡單,鍵入 py manage.py shell,便能夠進入 Python Shell

https://ithelp.ithome.com.tw/upload/images/20181009/201118298qPI32ZXZW.jpg

接著我們把 Models.py 的類別 VendorFood 引用進來
from vendor.models import Food, Vendor

之後你就可以開始操作 vendor app 的資料庫囉!

此時先下 Vendor.objects.all(),因為我們的資料庫目前是空的,你便能夠觀察它會回傳一個空的資料庫 <QuerySet []>

>>> Vendor.objects.all()
<QuerySet []>

而新增一筆 Vendor 資料有兩種方法

vendor = Vendor(vendor_name = "Alex", store_name="xelAshop", phone_number="09236", address='xs')
vendor.save()

or

vendor = Vendor.objects.create(vendor_name = "Alex", store_name="xelAshop", phone_number="09236", address='xs')

之後再輸入一次 Vendor.objects.all(),就可以看到多了一筆資料,而我們也可以透過鍵值(Key)
來取得相對應的值(Value)

>>> Vendor.objects.all()
<QuerySet [<Vendor: Vendor object (1)>]>
>>> vendor = Vendor.objects.get(id=1) # 取得第一筆資料
>>> vendor.vendor_name # 相對應的鍵值
'Alex'
>>> vendor.store_name
'xelAshop'
>>> vendor.address
'xs'
>>> vendor.phone_number
'09236'

若是想要**修改(Update)**某一筆資料,也可以透過類似的方法修改

# 將 vendor_name 是 Alex 的資料欄位中的 address 改成 Kao
Vendor.objects.filter(vendor_name = "Alex").update(address = 'Kao')

filter 顧名思義就是過濾的功能,根據後方我們所填入的 字典(Dict),來一一過濾,修改完畢再存取一次,你便能發現資料已經成功被修改了^^

>>> vendor = Vendor.objects.get(id=1)
>>> vendor.address
'Kao'

這裡我們新增一個食物(突然很想吃馬芬)至剛剛建立好的攤販vendor,便可以發現food成功關聯到vendor

>>> food = Food.objects.create(food_name='馬芬', price_name='45', food_vendor = vendor)
>>> food.food_vendor
<Vendor: Vendor object (1)>
>>> food.food_vendor.vendor_name
'Alex'
>>> food.food_vendor.store_name
'xelAshlp'

而 刪除(Delete) 相對簡單,只要將愈刪除的資料讀取進來,再後方加上**.delete()**即可

# 這裡只是示意,並沒有進行刪除的動作
Food.objects.get(id=1).delete()

最後我們到admin查看一下剛建立好的資料,顯示出來的就跟我們上面所說的一樣 ^^
https://ithelp.ithome.com.tw/upload/images/20181009/20111829yksbblBkQw.jpg

https://ithelp.ithome.com.tw/upload/images/20181009/20111829a7Z3IqYgZO.jpg

小結 : Django 提供一個強大的 CRUD,看似很複雜,但實際上相當容易! 只要稍微操作一下,相信大家很快就會熟練的


上一篇
Day8 : 創建管理員 - Admin
下一篇
Day10 : Models & Admin (1)
系列文
From Django 1.11 to Django 2.1 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
paicheng0111
iT邦大師 5 級 ‧ 2018-10-10 00:10:48

能夠直接下SQL指令嗎?

Percy iT邦新手 5 級 ‧ 2018-10-10 23:07:12 檢舉

Django 有方法可以應用SQL指令,
[someclass].objects.raw([SQL COMMAND])
指令如下

>>> for name in Vendor.objects.raw('SELECT * FROM vendor_vendor'):
...     print(name)
Alex

比較tricky的是撰寫 table 的格式為 [someapp]_[someclass]
因此我這裡才是用 from vendor_vendor

我要留言

立即登入留言