Lewati ke isi

Pydantik

CI Coverage
pypi CondaForge downloads
license

.

Pydantic adalah perpustakaan validasi data yang paling banyak digunakan untuk Python.

Cepat dan dapat diperluas, Pydantic berfungsi baik dengan linter/IDE/otak Anda. Tentukan bagaimana data seharusnya dalam Python 3.8+ yang murni dan kanonik; validasi dengan Pydantic.

!!! berhasil "Bermigrasi ke Pydantic V2" Menggunakan Pydantic V1? Lihat Panduan Migrasi untuk catatan tentang peningkatan ke Pydantic V2 di aplikasi Anda!

from datetime import datetime
from typing import Tuple

from pydantic import BaseModel


class Delivery(BaseModel):
    timestamp: datetime
    dimensions: Tuple[int, int]


m = Delivery(timestamp='2020-01-02T03:04:05Z', dimensions=['10', '20'])
print(repr(m.timestamp))
#> datetime.datetime(2020, 1, 2, 3, 4, 5, tzinfo=TzInfo(UTC))
print(m.dimensions)
#> (10, 20)

Mengapa Pydantic diberi nama seperti itu?

The name "Pydantic" is a portmanteau of "Py" and "pedantic." The "Py" part indicates that the library is associated with Python, and "pedantic" refers to the library's meticulous approach to data validation and type enforcement.

Combining these elements, "Pydantic" describes our Python library that provides detail-oriented, rigorous data validation.

We’re aware of the irony that Pydantic V1 was not strict in its validation, so if we're being pedantic, "Pydantic" was a misnomer until V2 😉.

Mengapa menggunakan Pydantic?

  • Didukung oleh petunjuk tipe — dengan Pydantic, validasi skema dan serialisasi dikontrol oleh anotasi tipe; lebih sedikit yang harus dipelajari, lebih sedikit kode yang harus ditulis, dan integrasi dengan IDE dan alat analisis statis Anda. Pelajari lebih lanjut…
  • Kecepatan — Logika validasi inti Pydantic ditulis dalam Rust. Hasilnya, Pydantic adalah salah satu perpustakaan validasi data tercepat untuk Python. Pelajari lebih lanjut…
  • Skema JSON — Model Pydantic dapat memancarkan Skema JSON, memungkinkan integrasi yang mudah dengan alat lain. Pelajari lebih lanjut…
  • Mode Ketat dan Lax — Pydantic dapat berjalan dalam mode strict=True (di mana data tidak dikonversi) atau mode strict=False di mana Pydantic mencoba memaksa data ke tipe yang benar jika diperlukan. Pelajari lebih lanjut…
  • Kelas data, TypedDicts, dan lainnya — Pydantic mendukung validasi banyak tipe perpustakaan standar termasuk kelas data dan TypedDict. Pelajari lebih lanjut…
  • Kustomisasi — Pydantic memungkinkan validator dan serializer khusus untuk mengubah cara data diproses dengan banyak cara yang canggih. Pelajari lebih lanjut…
  • Ekosistem — sekitar 8.000 paket di PyPI menggunakan Pydantic, termasuk perpustakaan yang sangat populer seperti FastAPI, wajah berpelukan, Django Ninja, SQLModel, & LangChain. Pelajari lebih lanjut…
  • Pertempuran teruji — Pydantic diunduh lebih dari 70 juta kali/bulan dan digunakan oleh semua perusahaan FAANG dan 20 dari 25 perusahaan terbesar di NASDAQ. Jika Anda mencoba melakukan sesuatu dengan Pydantic, orang lain mungkin sudah melakukannya. Pelajari lebih lanjut…

Menginstal Pydantic semudah: pip install pydantic

Contoh-contoh yang berlebihan

Untuk melihat Pydantic bekerja, mari kita mulai dengan contoh sederhana, membuat kelas khusus yang mewarisi BaseModel:

from datetime import datetime

from pydantic import BaseModel, PositiveInt


class User(BaseModel):
    id: int  # (1)!
    name: str = 'John Doe'  # (2)!
    signup_ts: datetime | None  # (3)!
    tastes: dict[str, PositiveInt]  # (4)!


external_data = {
    'id': 123,
    'signup_ts': '2019-06-01 12:22',  # (5)!
    'tastes': {
        'wine': 9,
        b'cheese': 7,  # (6)!
        'cabbage': '1',  # (7)!
    },
}

user = User(**external_data)  # (8)!

print(user.id)  # (9)!
#> 123
print(user.model_dump())  # (10)!
"""
{
    'id': 123,
    'name': 'John Doe',
    'signup_ts': datetime.datetime(2019, 6, 1, 12, 22),
    'tastes': {'wine': 9, 'cheese': 7, 'cabbage': 1},
}
"""
  1. id bertipe int; deklarasi khusus anotasi memberi tahu Pydantic bahwa bidang ini wajib diisi. String, byte, atau float akan dipaksa menjadi int jika memungkinkan; jika tidak, pengecualian akan dimunculkan.
  2. nama adalah string; karena sudah default, maka tidak diperlukan.
  3. signup_ts adalah bidang tanggalwaktu yang wajib diisi, namun nilai Tidak Ada dapat diberikan; Pydantic akan memproses int stempel waktu unix (misalnya 1496498400) atau string yang mewakili tanggal dan waktu.
  4. selera adalah kamus dengan kunci string dan nilai integer positif. Tipe PositiveInt adalah singkatan dari Annotated[int, annotated_types.Gt(0)] .
  5. Input di sini adalah datetime berformat ISO8601, Pydantic akan mengubahnya menjadi objek datetime.
  6. Kuncinya di sini adalah byte, tetapi Pydantic akan memaksanya menjadi string.
  7. Demikian pula, Pydantic akan memaksa string '1' menjadi bilangan bulat 1.
  8. Di sini kami membuat instance Pengguna dengan meneruskan data eksternal kami ke Pengguna sebagai argumen kata kunci
  9. Kita dapat mengakses kolom sebagai atribut model
  10. Kita dapat mengonversi model ke kamus dengan model_dump()

Jika validasi gagal, Pydantic akan memunculkan kesalahan dengan rincian kesalahannya:

# continuing the above example...

from pydantic import ValidationError


class User(BaseModel):
    id: int
    name: str = 'John Doe'
    signup_ts: datetime | None
    tastes: dict[str, PositiveInt]


external_data = {'id': 'not an int', 'tastes': {}}  # (1)!

try:
    User(**external_data)  # (2)!
except ValidationError as e:
    print(e.errors())
    """
    [
        {
            'type': 'int_parsing',
            'loc': ('id',),
            'msg': 'Input should be a valid integer, unable to parse string as an integer',
            'input': 'not an int',
            'url': 'https://errors.pydantic.dev/2/v/int_parsing',
        },
        {
            'type': 'missing',
            'loc': ('signup_ts',),
            'msg': 'Field required',
            'input': {'id': 'not an int', 'tastes': {}},
            'url': 'https://errors.pydantic.dev/2/v/missing',
        },
    ]
    """
  1. Data masukan salah di sini — id bukan bilangan bulat yang valid, dan signup_ts tidak ada
  2. Pengguna(...) akan memunculkan ValidationError dengan daftar kesalahan

Siapa yang menggunakan Pydantic?

Ratusan organisasi dan paket menggunakan Pydantic. Beberapa perusahaan dan organisasi terkemuka di seluruh dunia yang menggunakan Pydantic antara lain:

Untuk daftar proyek sumber terbuka yang lebih lengkap menggunakan Pydantic, lihat daftar tanggungan di github, atau Anda dapat menemukan beberapa proyek luar biasa menggunakan Pydantic di awesome-pydantic.


本文总阅读量