最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python的Pydantic概念及基本用法

 更新時間:2026年01月14日 09:37:48   作者:小oo呆  
Pydantic是一個Python庫,用于數(shù)據(jù)驗證和解析,它基于TypeHints,提供數(shù)據(jù)驗證和解析功能,基本用法包括定義模型、實例化與驗證、字段約束和嵌套使用,常見應用場景包括Web API、配置管理等,這篇文章介紹Python的Pydantic概念及基本用法,感興趣的朋友跟隨小編一起看看吧

Pydantic是Python生態(tài)中最流行的數(shù)據(jù)驗證和解析庫。絕大多數(shù)的Web框架(如FastAPI)和大模型框架LangChain都是基于它構建。簡單說他是一個基于Type Hints的庫。其核心功能有兩個,分別是:

  • 數(shù)據(jù)驗證(Validation):確保你拿到的數(shù)據(jù),符合你定義的格式
  • 數(shù)據(jù)解析(parsing):把凌亂的輸入,自動轉(zhuǎn)換成正確的類型

只要模型實例化成功,你就可以百分之百信任這個對象里的數(shù)據(jù)類型是完全正確的。

一、基本用法

pip install pydantic

1、定義模型

使用 BaseModel 類來創(chuàng)建數(shù)據(jù)模型:

from pydantic import BaseModel
class User(BaseModel):
    name: str
    age: int  # 如果不匹配,Pydantic 會嘗試強制轉(zhuǎn)換
    is_active: bool = True  # 可以有默認值

2、實例化與驗證

# 從字典創(chuàng)建實例
user = User(name="Alice", age="25")  # 注意:age 是字符串,但會被轉(zhuǎn)為 int
print(user.name)      # Alice
print(user.age)       # 25 (int)
print(user.is_active) # True
# 訪問原始數(shù)據(jù)
print(user.model_dump())  # {'name': 'Alice', 'age': 25, 'is_active': True}

如果數(shù)據(jù)不合規(guī),Pydantic 會拋出清晰的錯誤提示,而不是讓程序在后續(xù)運行中崩潰。

from pydantic import ValidationError
try:
    User(name="Bob", age="not_a_number")
except ValidationError as e:
    print(e.json()) # 會詳細列出格式錯誤

3、字段約束

字段約束不僅能檢查“類型”對不對,還能檢查“內(nèi)容”是否符合業(yè)務規(guī)則(比如:年齡不能是負數(shù)、密碼不能太短)。使用 Field 來添加額外的驗證規(guī)則:

from pydantic import BaseModel, Field
class Product(BaseModel):
    name: str = Field(min_length=2, max_length=50)
    price: float = Field(gt=0)  # 必須大于 0
    tags: list[str] = Field(default=[], min_items=1)
# 示例
Product(name="Laptop", price=999.99, tags=["electronics"])
約束縮寫全稱適用類型說明
gtgreater thanint, float大于
gegreater than or equalint, float大于等于
ltless thanint, float小于
leless than or equalint, float小于等于
min_length-str, list, dict最小長度
max_length-str, list, dict最大長度
pattern-str正則表達式匹配
allow_inf_nan-float是否允許無窮大或 NaN

4、嵌套使用

可以將不同的數(shù)據(jù)模型嵌套起來使用。

from typing import List, Optional
from pydantic import BaseModel, Field
# 1. 定義底層模型:商品
class Item(BaseModel):
    name: str
    price: float
    quantity: int = Field(gt=0, description="數(shù)量必須大于0")
# 2. 定義底層模型:收貨地址
class Address(BaseModel):
    city: str
    street: str
    zip_code: Optional[str] = None
# 3. 定義頂層模型:訂單(嵌套了 Item 和 Address)
class Order(BaseModel):
    order_id: int
    items: List[Item]  # 嵌套商品列表
    address: Address   # 嵌套地址對象
    remark: str = "無"
# --- 模擬原始數(shù)據(jù)(例如來自前端請求或數(shù)據(jù)庫) ---
raw_data = {
    "order_id": 1001,
    "items": [
        {"name": "鍵盤", "price": 299.0, "quantity": 1},
        {"name": "鼠標", "price": 99.5, "quantity": 2}
    ],
    "address": {
        "city": "上海",
        "street": "南京東路 123 號"
    }
}
# 解析數(shù)據(jù)
order = Order(**raw_data)
# 訪問嵌套數(shù)據(jù)
print(f"訂單 ID: {order.order_id}")
print(f"第一件商品名稱: {order.items[0].name}") # 自動補全非常爽
print(f"收貨城市: {order.address.city}")
  • 多級校驗:當你實例化 Order 時,Pydantic 會遞歸校驗。如果 items 列表里第二個商品的 price 格式不對,它會準確告訴你報錯位置。
  • IDE 自動補全:在編寫代碼時,輸入 order.address. 后,IDE 會自動提示 citystreet。這避免了手動處理字典時經(jīng)常出現(xiàn)的拼寫錯誤。
  • 自動轉(zhuǎn)換:如果 items 里的 price 傳的是字符串 "99.5",Pydantic 會自動幫你轉(zhuǎn)成 float。

二、常見應用場景

        最常見的場景當然是web API。可以用它來定義 API 的請求體和響應體。FastAPI 會自動根據(jù)你的 Pydantic 模型生成文檔,并自動校驗前端傳來的 JSON 數(shù)據(jù)。其次是進行配置管理,從環(huán)境變量或配置文件加載并驗證配置。通過 pydantic-settings 擴展,可以輕松讀取環(huán)境變量(.env 文件)。

pip install pydantic-settings
from pydantic_settings import BaseSettings
class Settings(BaseSettings):
    db_url: str
    api_key: str
    class Config:
        env_file = ".env"
settings = Settings() # 自動從環(huán)境變量加載并校驗

到此這篇關于Python的Pydantic概念及基本用法的文章就介紹到這了,更多相關Python Pydantic內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python requests發(fā)送post請求的一些疑點

    Python requests發(fā)送post請求的一些疑點

    在Python爬蟲中,使用requests發(fā)送請求,訪問指定網(wǎng)站,是常見的做法,這篇文章主要介紹了Python requests發(fā)送post請求的一些疑點,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • python basemap 畫出經(jīng)緯度并標定的實例

    python basemap 畫出經(jīng)緯度并標定的實例

    今天小編就為大家分享一篇python basemap 畫出經(jīng)緯度并標定的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Python Django使用forms來實現(xiàn)評論功能

    Python Django使用forms來實現(xiàn)評論功能

    這篇文章主要為大家詳細介紹了Python Django使用forms來實現(xiàn)評論功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-08-08
  • Python 面向?qū)ο?成員的訪問約束

    Python 面向?qū)ο?成員的訪問約束

    在Java,C++,以及PHP中都有對應的關鍵字,public,protected,private,但是在Python中卻沒有這些關鍵字來聲明類成員的訪問作用域。
    2008-12-12
  • 基于進程內(nèi)通訊的python聊天室實現(xiàn)方法

    基于進程內(nèi)通訊的python聊天室實現(xiàn)方法

    這篇文章主要介紹了基于進程內(nèi)通訊的python聊天室實現(xiàn)方法,實例分析了Python聊天室的相關實現(xiàn)技巧,需要的朋友可以參考下
    2015-06-06
  • Django框架之django admin的命令行詳解

    Django框架之django admin的命令行詳解

    這篇文章主要介紹了Django框架之django admin的命令行知識,文中通過示例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2021-09-09
  • Python爬取你好李煥英豆瓣短評生成詞云的示例代碼

    Python爬取你好李煥英豆瓣短評生成詞云的示例代碼

    這篇文章主要介紹了Python爬取你好李煥英豆瓣短評生成詞云,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • Python googletrans庫使用示例詳解

    Python googletrans庫使用示例詳解

    googletrans是一個基于谷歌翻譯API的Python庫,支持多種語言的自動檢測和翻譯,提供了translate和detect方法,用于翻譯文本和檢測文本語言,通過簡單的命令即可安裝使用,適合需要實現(xiàn)多語言翻譯功能的開發(fā)者
    2024-09-09
  • Python常遇到的錯誤和異常

    Python常遇到的錯誤和異常

    這篇文章主要介紹了Python常遇到的錯誤和異常,在日常的學習Python過程中,由于本身的編程水平受限,時不時的給我拋出一個異常讓我真的很難受;在學習的過程中發(fā)現(xiàn)Python中的錯誤分為語法錯誤和異常兩種。下面來看看下面文章錯誤異常的實例,需要的朋友可以參考一下
    2021-11-11
  • Python3.10新特性之match語句示例詳解

    Python3.10新特性之match語句示例詳解

    這篇文章主要為大家介紹了Python3.10新特性之match語句示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02

最新評論

施甸县| 全椒县| 鄯善县| 五家渠市| 南皮县| 民丰县| 静宁县| 浦江县| 宁海县| 灵宝市| 雷波县| 广灵县| 深水埗区| 吉木乃县| 淳安县| 咸宁市| 尤溪县| 盐池县| 周口市| 澜沧| 长顺县| 北票市| 万源市| 桦南县| 福建省| 呼伦贝尔市| 元阳县| 灵山县| 泸西县| 古丈县| 汪清县| 随州市| 娄烦县| 彰化县| 思南县| 准格尔旗| 南昌市| 隆林| 伊金霍洛旗| 攀枝花市| 获嘉县|