iT邦幫忙

2023 iThome 鐵人賽

DAY 23
0
Software Development

玩轉 Python 與 MongoDB系列 第 23

玩轉 Python 與 MongoDB_Day23_多型與 pymongo

  • 分享至 

  • xImage
  •  

以下是一個搭配 Pydantic 的示例,演示如何使用多型性進行 CRUD 操作,並且在資料模型中使用 Pydantic:

首先,我們定義使用 Pydantic 的資料模型:

from pydantic import BaseModel
from bson import ObjectId
from datetime import datetime

class User(BaseModel):
    name: str
    email: str

class Product(BaseModel):
    name: str
    price: float

class DatabaseHandler(ABC):
    @abstractmethod
    def create(self, data: BaseModel):
        pass

    @abstractmethod
    def read(self, query: dict):
        pass

    @abstractmethod
    def update(self, query: dict, data: BaseModel):
        pass

    @abstractmethod
    def delete(self, query: dict):
        pass

接下來,我們建立使用 Pydantic 的子類 UserHandlerProductHandler,並實現了特定於使用者和產品的 CRUD 操作,同時使用 Pydantic 的資料模型:

class UserHandler(DatabaseHandler):
    def create(self, data: User):
        # 將Pydantic模型轉換為字典
        user_data = data.dict()
        return self.db.users.insert_one(user_data)

    def read(self, query: dict):
        result = self.db.users.find(query)
        # 將結果轉換為Pydantic模型
        return [User(**item) for item in result]

    def update(self, query: dict, data: User):
        # 將Pydantic模型轉換為字典
        user_data = data.dict()
        return self.db.users.update_one(query, {"$set": user_data})

    def delete(self, query: dict):
        return self.db.users.delete_one(query)

class ProductHandler(DatabaseHandler):
    def create(self, data: Product):
        # 將Pydantic模型轉換為字典
        product_data = data.dict()
        return self.db.products.insert_one(product_data)

    def read(self, query: dict):
        result = self.db.products.find(query)
        # 將結果轉換為Pydantic模型
        return [Product(**item) for item in result]

    def update(self, query: dict, data: Product):
        # 將Pydantic模型轉換為字典
        product_data = data.dict()
        return self.db.products.update_one(query, {"$set": product_data})

    def delete(self, query: dict):
        return self.db.products.delete_one(query)

現在,我們可以使用 Pydantic 資料模型來創建、讀取、更新和刪除使用者和產品。這將提供更好的資料驗證和型別提示,同時利用多型性來處理不同的資料型別。


上一篇
玩轉 Python 與 MongoDB_Day22_物件導向設計-多型
下一篇
玩轉 Python 與 MongoDB_Day24_索引基本概念
系列文
玩轉 Python 與 MongoDB30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言