「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Pydantic • データの検証とサニタイズに対処する

Pydantic • データの検証とサニタイズに対処する

2024 年 8 月 19 日に公開
ブラウズ:262

Pydantic • Dealing with validating and sanitizing data

プログラミングを始めて以来、タスクにはより実践的で直接的な解決策が必要だったので、私は主に構造化パラダイムと手続き型パラダイムを使用してきました。データ抽出を扱うときは、より組織化されたコードを実現するために新しいパラダイムに移行する必要がありました。

この必要性の例としては、スクレイピング タスク中に、最初は処理方法を知っていたタイプの特定のデータをキャプチャする必要があったときがありましたが、その後突然、そのデータが存在しなかったり、キャプチャ中に別のタイプで表示されたりしました。 .

その結果、データが int か string かをチェックするために、いくつかの if's ブロックと try and catch ブロックを追加する必要がありました...後で何もキャプチャされていないことがわかりました。辞書を使用すると、次のような状況で、興味のない「デフォルト データ」を保存することになります。

data.get(values, 0)

そうですね、紛らわしいエラー メッセージは確かに表示されないようにする必要がありました。

これが Python が動的である仕組みです。変数の型は、操作している型をより明確にする必要があるまで、いつでも変更できます。その後、突然大量の情報が表示され、現在、型ヒントと興味深い pydantic ライブラリをサポートする IDE を使用して、データ検証にどのように対処できるかを読んでいます。

データ操作などのタスクでは、新しいパラダイムを使用して、型を明示的に宣言したオブジェクトと、これらの型を検証できるライブラリを使用できるようになりました。何か問題が発生した場合、より詳しく説明されたエラー情報を確認することでデバッグが容易になります。


ピダンティック

それでは、これが Pydantic のドキュメントです。さらに質問がある場合は、いつでも相談してください。

基本的には、すでにご存知のとおり、次のことから始めます:

pip install pydantic

そして、仮に、これらの電子メールを含むソースから電子メールをキャプチャしたいとします。そのほとんどは、「[email protected]」のようになります。ただし、場合によっては、「xxxx@」または「xxxx」のように表示される場合があります。キャプチャする必要がある電子メールの形式については何の疑問もありません。そのため、この電子メール文字列を Pydantic:
で検証します。

from pydantic import BaseModel, EmailStr

class Consumer(BaseModel):
    email: EmailStr
    account_id: int

consumer = Consumer(email="teste@teste", account_id=12345)

print(consumer)

pip install pydantic[email] でインストールされたオプションの依存関係「email-validator」を使用していることに注意してください。コードを実行すると、ご存知のとおり、無効な電子メール形式「teste@teste」:
でエラーが発生します。

Traceback (most recent call last):
  ...
    consumer = Consumer(email="teste@teste", account_id=12345)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  ...: 1 validation error for Consumer
email
  value is not a valid email address: The part after the @-sign is not valid. It should have a period. [type=value_error, input_value='teste@teste', input_type=str]

独自の検証を作成するのと同じように、オプションの依存関係を使用してデータを検証することは興味深いものであり、Pydantic では field_validator を介してこれを許可します。したがって、account_id はゼロより大きい正の値でなければならないことがわかります。異なる場合は、Pydantic が例外、つまり値のエラーがあったことを警告するのが興味深いでしょう。コードは次のようになります:

from pydantic import BaseModel, EmailStr, field_validator

class Consumer(BaseModel):
    email: EmailStr
    account_id: int

    @field_validator("account_id")
    def validate_account_id(cls, value):
        """Custom Field Validation"""
        if value 





$ python capture_emails.py
Traceback (most recent call last):
...
    consumer = Consumer(email="[email protected]", account_id=0)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

...: 1 validation error for Consumer
account_id
  Value error, account_id must be positive: 0 [type=value_error, input_value=0, input_type=int]
    For further information visit https://errors.pydantic.dev/2.8/v/value_error

次に、正しい値を使用してコードを実行します:

from pydantic import BaseModel, EmailStr, field_validator

class Consumer(BaseModel):
    email: EmailStr
    account_id: int

    @field_validator("account_id")
    def validate_account_id(cls, value):
        """Custom Field Validation"""
        if value 





$ python capture_emails.py
email='[email protected]' account_id=12345

右?!

ネイティブの「dataclasses」モジュールについても読みました。これはもう少し単純で、Pydantic といくつかの類似点があります。ただし、検証が必要なより複雑なデータ モデルを処理するには、Pydantic の方が適しています。データクラスは Python にネイティブに含まれていますが、Pydantic は、少なくとも、まだ含まれていません。

リリースステートメント この記事は次の場所に転載されています: https://dev.to/evertontenorio/pydantic-dealing-with-validating-and-sanitizing-data-594p?1 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3