日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

【Django】基于PythonWeb的Django框架设计实现天天生鲜系统-5数据库操作

發布時間:2023/12/16 windows 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【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数据库操作的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。