【Django】基于PythonWeb的Django框架设计实现天天生鲜系统-5数据库操作
數據庫操作
首先在終端輸入命令:
python manage.py shell顯示界面如下圖所示:
此時進入 shell, 我們可在 shell 中通過面向對象方式對數據庫中的數據進行 CRUD 操作.
1 插入操作
在 Django 中我們不需要編寫一行 SQL 語句, 就可以對數據庫中的數據進行操作. 完全基于面向對象的方式. 下面我們通過面向對象的方式在數據庫的商品分類表中插入數據, 執行代碼如下:
from goods.models import * categories = [('新鮮水果', 'fruit'), ('海鮮水產', 'seafood'), ('豬牛羊肉', 'meet'), ('禽類蛋品', 'egg'), ('新鮮蔬菜', 'vegetables'), ('速凍食品', 'ice')] for index, cag in zip(range(1, 7), categories):c = GoodsCategory()c.cag_name = cag[0]c.cag_css = cag[1]c.cag_img = 'images/banner0%d.jpg' % indexc.save()我們創建一條數據, 只需要創建一個對應模型的實例對象, 然后調用該對象的 save 方法, 即可向數據庫中添加一條數據. 我們上面的代碼, 通過 for 循環向數據庫中插入了我們項目需要的商品分類數據.
執行效果如下圖所示:
查看數據庫中執行結果, 如下圖所示:
為了加深印象, 我們再通過同樣的方式向數據庫中插入商品數據. 我們商品數據對應的商品名稱被定義在 data.txt 的數據文件中, 該文件路徑為項目根目錄. 我們讀取該文件中的數據, 并將其插入到數據庫中.
data.txt 數據文件部分內容如下:
蘋果 杏子 檳榔子 香蕉 山毛櫸堅果 海棠果 酸橙 黑莓 ...對應商品圖片數據我們放置在了 static/goods目錄下, 文件目錄如下圖所示:
插入商品數據代碼如下:
from goods.models import * from random import randint ? ? # 商品計量單位 goods_unit = ['100克', '200克', '1斤', '5斤', '1個', '2個'] ? with open('./data.txt', 'r') as file: ?for line in file: ?# 創建商品對象goods = GoodsInfo()# 設置屬性值goods.goods_name = line[:-1] ?# 去除名字之后的空格goods.goods_price = randint(100, 999)goods.goods_img = 'goods/%s.jpg' % randint(1, 18)goods.goods_desc = '商品詳細信息描述!'goods.goods_unit = goods_unit[randint(0, len(goods_unit) - 1)]goods.goods_cag_id = randint(1, 6) ?# 設置商品所屬分類goods.save()這里需要額外說明一點, goods_cag = models.ForeignKey('GoodsCategory') 實際在數據庫中存儲的是商品分類數據的主鍵. 設置商品所屬分類:
# 創建商品分類 cag = GoodsCategory() ... cag.save() ? goods = GoodsInfo() ... goods.goods_cag = cag goods.save()代碼執行效果如下圖所示:
查看數據庫中執行結果, 如下圖所示:
2 查詢操作
查詢操作我們主要用到了3個方法:
get, 查詢一條數據.
all, 獲得所有數據.
filter, 根據條件過濾數據.
get 方法:
如果你知道只有一個對象滿足你的查詢,你可以使用管理器的 get 方法,它直接返回該對象. 例: 查詢商品名字為 "香蕉" 的對象.
from goods.models import * goods = GoodsInfo.objects.get(goods_name='香蕉') print('商品名字:', goods.goods_name)objects 為 GoodsInfo 類的對象屬性, 該對象屬性叫做管理器對象, 在該對象中封裝了用于數據庫操作的方法, 例如, get 方法就是在 objects 對象定義的方法.
如果匹配到的對象個數不只一個的話,get 將會觸發 MultipleObjectsReturned 異常. MultipleObjectsReturned 異常是模型類的屬性. 如果根據給出的參數匹配不到對象的話, 將觸發DoesNotExist 異常. 這個異常是模型類的屬性.
all 方法:
獲取一個表中所有對象的最簡單的方式是全部獲取。可以使用管理器的 all 方法:
all_cags = GoodsCategory.objects.all()all 方法返回包含數據庫中所有對象的一個查詢結果集。對結果使用切片語法, 例:獲得所有結果集的前兩個對象組成的結果集:
cags = GoodsCategory.objects.all()[1: 3]filter 方法:
all 方法返回了一個包含數據庫表中所有記錄查詢集. 但在通常情況下,我們往往想要獲取的是完整數據集的一個子集. 要創建這樣一個子集,你需要在原始的的查詢集上增加一些過濾條件。
例如, 查詢分類 ID 為1的所有商品.
from goods.models import * # 查詢ID為1的分類 cag = GoodsCategory.objects.get(id=1) goods_list = GoodsInfo.objects.filter(goods_cag=cag) goods_list.count()執行效果如下圖所示:
3 更新操作
Django 創建和更新對象,使用同一個函數save(). 當調用save()時, django會判斷對象是否有主鍵,如果存在則調用更新,如果不存在則創建數據.
cag = GoodsCategory.objects.get(id=1) cag.cag_name = '新分類名字' cag.save()4 刪除操作
cag = GoodsCategory.objects.get(id=1) cag.cag_name = '新分類名字' cag.delete()?
總結
以上是生活随笔為你收集整理的【Django】基于PythonWeb的Django框架设计实现天天生鲜系统-5数据库操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AI机器学习实战の电磁导航智能车中神经网
- 下一篇: java信息管理系统总结_java实现科