python進階(22)pydantic--數據類型校驗


pydantic庫的作用

  • pydantic庫是一種常用的用於數據接口schema定義與檢查的庫。
  • Pydantic 在運行時強制執行類型提示,並在數據無效時提供用戶友好的錯誤信息。
     

pydantic安裝

pip install pydantic

 

用法詳解

 

模型

  • pydantic中定義對象的主要方法是通過模型(模型是繼承自 BaseModel 的類)。
  • 將模型看作嚴格類型語言中的類型(例如Java),或者看作API中單個端點的需求。
  • 不受信任的數據可以傳遞給模型,在解析和驗證之后,pydantic保證結果模型實例的字段將符合模型上定義的字段類型。

注意事項

  • pydantic是一個解析庫,而不是一個驗證庫。
  • 驗證是達到目的的一種手段:構建符合所提供的類型和約束的模型。
  • 換句話說,pydantic保證輸出模型的類型和約束,而不是輸入數據。
     

基礎模型使用

from pydantic import BaseModel


class User(BaseModel):
    id: int
    name = "Silent丿丶黑羽"
  • User這是一個有兩個字段的模型
  • id是一個整型,必填項
  • name是一個有默認值的字符串,不是必填項

為什么name字段不需要聲明類型

  • name 的類型是從其默認值推斷來的,因此,類型注解不是必需的
  • 有些字段沒有指定類型,可能會引發字段順序的警告
user = User(id="123")
print(type(user))  # <class '__main__.User'>
print(user)  # id=123 name='Silent丿丶黑羽'

這里的 userUser 的一個實例。對象的初始化會執行所有解析和驗證,如果沒有引發 ValidationError 異常,則表明結果模型實例是有效的。

這里我們傳入了的id是一個字符串,但實際打印出來卻是整型,是因為pydantic在數據傳輸時會直接進行數據轉換
 

模型屬性

模型有多個屬性和方法,我們依次介紹
 

dict()

返回模型的字段和值的字典

user = User(id=123)
print(user.dict())  # {'id': 123, 'name': 'jkc'}
print(type(user.dict()))  # <class 'dict'>

 

json()

返回表示 dict()JSON 字符串

user = User(id=123)
print(user.json())  # {"id": 123, "name": "jkc"}
print(type(user.json()))  # <class 'str'>

 

copy()

返回模型的拷貝,默認是淺拷貝

user = User(id=123)
print(user.copy())  # id=123 name='jkc'

 

parse_obj()

這與模型的_init__方法非常相似,只是它采用dict而不是關鍵字參數。如果傳遞的對象不是dict,將引發ValidationError

user = User(id=123)
print(user.parse_obj({"id": 3, "name": "jkc"}))  # id=3 name='jkc'
print(user.parse_obj(['a']))  # 引發ValidationError錯誤

parse_raw()

用於加載多種格式字符串的實用程序

user = User(id=123)
print(user.parse_raw('{"id": 3, "name": "jkc"}'))  # id=3 name='jkc'

 

parse_file()

parse_raw() 類似,但是是接收文件路徑,讀取文件並將內容傳遞給parse_raw

path = Path('data.json')
path.write_text('{"id": 123, "name": "James"}')
m = User.parse_file(path)
print(m)  # id=123 signup_ts=None name='James'

 

schema()

返回以 JSON Schema 形式返回模型,以字典格式

user = User(id=123, name="jkc")
print(user.schema())
print(type(user.schema()))

# 輸出結果
{
    "title":"User",
    "type":"object",
    "properties":{
        "id":{
            "title":"Id",
            "type":"integer"
        },
        "name":{
            "title":"Name",
            "default":"jkc",
            "type":"string"
        }
    },
    "required":[
        "id"
    ]
}

<class 'dict'>

 

schema_json()

返回以 JSON Schema 形式返回模型,以JSON字符串形式

user = User(id=123, name="jkc")
print(user.schema_json())
print(type(user.schema_json()))

# 輸出結果
{
    "title":"User",
    "type":"object",
    "properties":{
        "id":{
            "title":"Id",
            "type":"integer"
        },
        "name":{
            "title":"Name",
            "default":"jkc",
            "type":"string"
        }
    },
    "required":[
        "id"
    ]
}

<class 'str'>

 

fields_set

返回用戶初始化對象時提供了什么字段

user = User(id=123)
print(user.__fields_set__)  # {'id'}

user = User(id=123, name="jkc")
print(user.__fields_set__)  # {'name', 'id'}

 

config

模型的配置類(后續更新)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM