python中的pydantic是什么?

Pydantic 是 Python 中一個用于數據驗證和設置管理的庫,主要通過 Python 類型注解(Type Hints)來定義數據結構,并自動驗證輸入數據的合法性。它廣泛應用于 API 開發(如 FastAPI)、配置管理、數據序列化等場景。


核心功能

  1. 數據驗證
    自動檢查輸入數據是否符合類型和約束條件(如字符串長度、數字范圍等)。
  2. 類型轉換
    將原始數據(如 JSON、字典)轉換為 Python 類型(如 datetimeEnum)。
  3. 序列化
    輕松將模型轉換為字典或 JSON。
  4. IDE 友好
    配合類型提示,提供代碼補全和錯誤檢查。

基礎用法示例

1. 定義一個數據模型
from pydantic import BaseModel, Field, EmailStr
from datetime import datetimeclass User(BaseModel):id: intname: str = Field(min_length=2, max_length=10)  # 約束字符串長度email: EmailStr  # 自動驗證郵箱格式signup_time: datetime | None = None  # 可選字段# 使用示例
user_data = {"id": 123,"name": "Alice","email": "alice@example.com","signup_time": "2024-01-01T12:00:00"
}user = User(**user_data)  # 自動驗證和轉換
print(user)
# 輸出:id=123 name='Alice' email='alice@example.com' signup_time=datetime.datetime(2024, 1, 1, 12, 0)
2. 驗證失敗時的錯誤處理
try:User(id=1, name="A", email="invalid-email")
except Exception as e:print(e)
# 輸出:
# 1 validation error for User
# email
#   value is not a valid email address (type=value_error.email)
3. 序列化為字典或 JSON
user_dict = user.model_dump()  # 轉為字典
user_json = user.model_dump_json()  # 轉為 JSON 字符串

高級特性

1. 自定義驗證器
from pydantic import validatorclass Product(BaseModel):price: float@validator("price")def price_must_be_positive(cls, v):if v <= 0:raise ValueError("價格必須為正數")return vProduct(price=10.5)  # 正常
Product(price=-1)   # 拋出 ValueError
2. 嵌套模型
class Address(BaseModel):city: strstreet: strclass Company(BaseModel):name: straddress: Address  # 嵌套模型company = Company(name="DeepSeek", address={"city": "Hangzhou", "street": "Xihu"})
3. 動態模型(Settings 配置)
from pydantic_settings import BaseSettingsclass AppSettings(BaseSettings):api_key: strdebug: bool = Falseclass Config:env_file = ".env"  # 從 .env 文件加載配置settings = AppSettings()  # 自動讀取環境變量

Pydantic 版本注意

  • Pydantic V1:舊版(如 pydantic<2.0),語法略有不同(如 .dict() 而非 .model_dump())。
  • Pydantic V2:新版(推薦),性能更好,功能更豐富。

安裝最新版:

pip install pydantic pydantic-settings

常見應用場景

  1. API 請求/響應驗證(如 FastAPI)
    from fastapi import FastAPI
    app = FastAPI()@app.post("/users")
    def create_user(user: User):  # 自動驗證請求體return {"message": f"User {user.name} created"}
    
  2. 配置文件管理
    通過環境變量或文件加載配置。
  3. 數據管道
    確保輸入數據符合預期格式。

與其他工具對比

工具特點
Pydantic基于類型注解,強調驗證和序列化
Dataclasses僅提供數據容器,無驗證功能
Marshmallow需顯式定義 Schema,靈活性高但更冗長

Pydantic 的簡潔性和強大功能使其成為 Python 生態中數據處理的標桿工具。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/912756.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/912756.shtml
英文地址,請注明出處:http://en.pswp.cn/news/912756.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

騰訊云市場目前飽和度

首先我需要理解市場飽和度的概念。市場飽和度通常指一個產品或服務在潛在市場中的滲透程度&#xff0c;高飽和度意味著市場增長空間有限&#xff0c;低飽和度則表明還有較大發展潛力。 從搜索結果看&#xff0c;騰訊云目前在中國云服務市場排名第三&#xff0c;市場份額約為15%…

EDR、NDR、XDR工作原理和架構及區別

大家讀完覺得有幫助記得關注和點贊&#xff01;&#xff01;&#xff01; EDR、NDR、XDR是網絡安全中關鍵的檢測與響應技術&#xff0c;它們在覆蓋范圍、數據源和響應機制上有顯著差異。以下是它們的工作原理和架構詳解&#xff1a; --- ### &#x1f50d; 一、EDR&#xff0…

vue3 + luckysheet 實現在線編輯Excel

效果圖奉上&#xff1a; 引入的依賴&#xff1a; "dependencies": {"types/jquery": "^3.5.32","types/xlsx": "^0.0.36","jquery": "^3.7.1","xlsx": "^0.18.5",}在index.html中…

Linux下MinIO分布式安裝部署

文章目錄 一、MinIO簡單說明二、MinIO分布式安裝部署1、關閉SELINUX2、開啟防火墻2.1、關閉firewall&#xff1a;2.2、安裝iptables防火墻 3、安裝MinIO4、添加MinIO集群控制腳本4.1添加啟動腳本4.2添加關閉腳本 5、MinIO控制臺使用 一、MinIO簡單說明 1、MinIO是一個輕量的對…

Codeforces Round 980 (Div. 2)

ABC 略 D 這個過程一定是由1向后跳的過程中穿插有幾次向前一步一步走。直到跳到一個位置后再把前面所有沒有走過的位置倒序走一遍。總分就等于最大位置的前綴和-前面所有起跳位置和。前綴和固定我們只需要求到每個位置的最小起跳和即可。對于這個向后跳和向前走的過程我們可以…

Langchain實現rag功能

RAG&#xff08;檢索增強生成&#xff09;的核心是通過外部知識庫增強大模型回答的準確性和針對性&#xff0c;其工作流程與優化策略如下&#xff1a; 一、RAG 核心流程 ?知識庫構建? ?文檔加載與分割?&#xff1a;將非結構化文檔&#xff08;PDF、Markdown等&#xff09;…

算法筆記上機訓練實戰指南刷題

算法筆記上機訓練實戰指南刷題記錄 文章目錄 算法筆記上機訓練實戰指南刷題記錄模擬B1001 害死人不償命的(3n1)猜想B1011 AB 和 CB1016 部分ABB1026 程序運行時間B1046劃拳B1008數組元素循環右移問題B1012 數字分類B1018 錘子剪刀布A1042 Shuffling Machine 每天兩題&#xff0…

MYSQL基礎內容

一、介紹 1.不用數據庫&#xff1a;使用IO流對數據進行管理 2.使用數據庫&#xff1a;使用SQL語句對開發的數據進行管理&#xff0c;能儲存上億條數據 3.MYSQL&#xff1a; 是流行的關系型數據庫管理系統之一&#xff0c;將數據保存在不同的數據表中&#xff0c;通過表與表之…

音視頻會議服務搭建(設計方案)-01

前言 最近在做音視頻會議系統服務搭建的工作任務&#xff0c;因為內容過多&#xff0c;我會逐篇分享相關的設計方案、開發思路、編程語言、使用的組件集合等等。如果你也有大型音視頻會議系統搭建架構的需求&#xff0c;希望這些可以對你有所幫助。 EchoMeet 音視頻會議系統架構…

刷leetcode hot100/準備機試--圖

圖的基礎知識【這部分建議使用acm模式】 圖論理論基礎 | 代碼隨想錄 存儲&#xff1a; 一般有鄰接表【適合稀疏圖】【數組 鏈表 】和鄰接矩陣【適合稠密圖】存儲方式 注意鄰接表 和 鄰接矩陣的寫法都要掌握&#xff01; 鄰接矩陣 n個節點&#xff0c;申請n*n或者&#xf…

無代碼自動化測試工具介紹

無代碼自動化測試工具允許用戶無需編寫代碼即可創建和運行測試,通過拖拽式界面或錄制回放等可視化界面進行操作。 這些工具利用圖形用戶界面和預定義命令來創建測試,使非編程人員也能進行自動化測試。 無代碼自動化測試工具使團隊能夠: 使用直觀的拖拽界面開發和執行自動化…

python學習打卡day58

DAY 58 經典時序預測模型2 知識點回顧&#xff1a; 時序建模的流程時序任務經典單變量數據集ARIMA&#xff08;p&#xff0c;d&#xff0c;q&#xff09;模型實戰SARIMA摘要圖的理解處理不平穩的2種差分 n階差分---處理趨勢季節性差分---處理季節性 建立一個ARIMA模型&#xf…

分布式鎖的實現方式:使用 Redisson 實現分布式鎖( Spring Boot )

Redisson提供了分布式和可擴展的Java數據結構&#xff0c;包括分布式鎖的實現。 1. 添加依賴 在pom.xml中添加Redisson依賴&#xff1a; <dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId>…

Web基礎關鍵_004_CSS(二)

目 錄 一、樣式 1.行內樣式 2.內部樣式 3.外部樣式 二、選擇器優先級 1.非關系選擇器 2.關系選擇器 三、屬性 四、盒子模型 五、元素 1.塊級元素 2.行內元素 3.行內塊級元素 4.元素類型轉換 六、浮動 七、定位 1.靜態定位 2.相對定位 3.絕對定位 4.固定定位 …

數據使用權與所有權分離:能否誕生“數據租賃”市場

——首席數據官高鵬律師數字經濟團隊創作&#xff0c;AI輔助 數據如礦藏&#xff0c;開采需“契約” 想象一座蘊藏著無盡資源的數字礦山&#xff1a;企業或個人擁有數據的“所有權”&#xff0c;如同手握礦脈的產權&#xff0c;但若無法高效挖掘其價值&#xff0c;礦石終將沉…

【esp32s3】2 - 第一個組件

下面的內容編寫時間跨度有點大&#xff0c;亂了得一團&#xff0c;也沒ai整理。食之無味&#xff0c;棄之可惜。 推薦筆記&#xff1a;ESP32 之 ESP-IDF 教學&#xff08;十八&#xff09;—— 組件配置&#xff08;KConfig&#xff09; 推薦筆記&#xff1a;Kconfig 拓展 樂鑫…

【Java_EE】單例模式、阻塞隊列、線程池、定時器

目錄 單例模式 餓漢模式<代碼> 懶漢模式<代碼> 阻塞隊列 阻塞隊列概念 阻塞隊列解決的問題 阻塞隊列工作原理 阻塞隊列的優/缺點 優點 缺點 模擬實現阻塞隊列<代碼> 線程池 線程池概念 線程池解決的問題 線程池參數 四種拒絕策略 線程池工作…

Redis初識第七期---ZSet的命令和應用場景

ZSet相較于Set來說&#xff0c;它又是有序的&#xff0c;這個有序指的就是我們通常意義上的有序了&#xff0c;ZSet內部中是按照升序來排序的。 排序規則&#xff1a;ZSet相較于Set來說&#xff0c;它內部引入了一個新的屬性&#xff1a;分數&#xff08;Score&#xff09;&am…

Wps開放平臺v5升級v7上傳實體文件踩坑(Java使用restTemplate)

背景&#xff1a; 最近接到一個老項目需求&#xff0c;之前開發的WPS開放平臺文件&#xff08;商密集成&#xff09;預覽功能因為升級需要重新對接api&#xff0c;新的上傳文件接口踩坑特意記錄一下。 這里出問題的是第二步&#xff0c;請求文件上傳信息 踩坑代碼 調用后403 p…

啥時候上RAG?啥時候上微調?丨實戰筆記

哈嘍&#xff0c;大家好&#x1f44f; 我是阿星&#xff01; 現在很多AI科普文章都會提到微調&#xff0c;RAG。 但是沒有實戰的過的同學可能會問&#x1f914;—— 啥時候用RAG&#xff1f;啥時候用微調呢&#xff1f;有啥區別&#xff1f;不都是讓模型增加知識面的嗎&…