Lewati ke isi

Catatan Rilis

0.20.1

✨ perubahan besar

  • Perhatikan bahwa ini adalah rilis non-beta pertama dari ormar dengan dukungan untuk Pydantic v2. Periksa 0.20.0 catatan rilis dan https://collerek.github.io/ormar/0.20.0b1/migration/

🐛 perbaikan

  • Perbaiki penggabungan model target yang sama saat menggunakan pilih\ _ lated dan prefetch\ _ lated # 906
  • Fix save issue terkait dengan model PK-only # 812
  • Fix menambahkan hubungan yang sama beberapa kali akan merusak cache hubungan # 1335

✨ fitur

  • Izinkan menambahkan indeks kunci asing melalui @ cmflynn # 1276

💬lainnya

  • @ Chaoyingz memperbaiki beberapa dokumentasi, terima kasih!

0.20.0

✨ perubahan besar

  • Umar, konfigurasi model

    Sekarang, setiap model ormar membutuhkan parameter ormar\ _ config, yang merupakan contoh dari kelas OrmarConfig, daripada mendefinisikan kelas Meta. Perhatikan bahwa properti harus diberi nama ormar\ _ config dan menjadi contoh dari kelas config.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    Basis data impor
    Asrama impor
    meter persegi import
    
    Database = database. Database ("sqlite: / / db.sqlite")
    Metadata = sqlalchemy. MetaData ()
    
    # ormar < 0,20
    Album Kelas (ormar. Model):
        Meta Kelas:
            Basis data = basis data
            Metadata = metadata
            Nama tabel = "album"
    
        Id: int = ormar. Integer (primary _ key = Benar)
        Nama: str = ormar. String (max _ length = 100)
        Favorit: bool = ormar. Boolean (default = Salah)
    
    # ormar > = 0,20
    Kelas AlbumV20 (ormar. Model):
        ormar _ config = ormar. OrmarConfig (
            Database = database,
            Metadata = metadata,
            Nama tabel = "album _ v20"
        )
    
        Id: int = ormar. Integer (primary _ key = Benar)
        Nama: str = ormar. String (max _ length = 100)
        Favorit: bool = ormar. Boolean (default = Salah)
    
  • OrmarConfig api / Parameter

    Ormar\ _ config memaparkan rangkaian pengaturan yang sama yang disediakan oleh kelas Meta. Ini berarti Anda dapat menginisialisasi konfigurasi dengan salah satu parameter berikut:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    Metadata: Opsional [sqlalchemy. MetaData]
    Database: Opsional [database. Database]
    Mesin: Opsional [sqlalchemy.engine. mesin]
    Tablename: Opsional [str]
    order _ by: Opsional [Daftar [str]]
    Abstrak: bodoh
    mengecualikan _ parent _ fields: Opsional [Daftar [str]]
    queryset _ class: Tipe [QuerySet]
    Ekstra: Ekstra
    Kendala: Opsional [Daftar [ColumnCollectionConstraint]]
    
  • Setara BaseMeta - Praktik Terbaik

    Harap dicatat bahwa untuk mengurangi duplikasi kode dan menyederhanakan pengembangan, tetap disarankan untuk membuat konfigurasi dasar dan memberikan salinan setiap model. OrmarConfig menyediakan metode replikasi yang nyaman untuk ini.

    Metode penyalinan mengambil argumen yang sama seperti OrmarConfig di dalamnya, sehingga Anda dapat mengesampingkan sesuai kebutuhan, tetapi secara default akan mengembalikan properti yang ada, kecuali untuk tablename, urutan\ _ by, dan batasan yang dibersihkan secara default.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Basis data impor
    Asrama impor
    meter persegi import
    
    base _ ormar _ config = ormar. OrmarConfig (
        Database = database. Database ("sqlite: / / db.sqlite"),
        Metadata = sqlalchemy. MetaData ()
    )
    
    Kelas AlbumV20 (ormar. Model):
        ormar _ config = base _ ormar _ config copy (
            Nama tabel = "album _ v20"
        )
    
        Id: int = ormar. Integer (primary _ key = Benar)
        Nama: str = ormar. String (max _ length = 100)
    
    Kelas TrackV20 (ormar. Model):
        ormar _ config = base _ ormar _ config copy (
            Nama tabel = "trek _ v20"
        )
    
        Id: int = ormar. Integer (primary _ key = Benar)
        Nama: str = ormar. String (max _ length = 100)
    
  • Parameter bidang opsi tidak lagi didukung.

    Sebelum versi 0.20, Anda dapat memberikan argumen opsi ke bidang ormar yang ada untuk membatasi nilai yang dapat diterima. Fitur ini telah dihapus dan Anda harus menggunakan ormar. Bidang Enum dirancang untuk tujuan ini. Jika Anda ingin melestarikan tipe bidang basis data (yaitu bidang bilangan bulat), Anda selalu dapat menulis validator khusus.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    Basis data impor
    Asrama impor
    meter persegi import
    
    Database = database. Database ("sqlite: / / db.sqlite")
    Metadata = sqlalchemy. MetaData ()
    
    # ormar < 0,20
    Artis Kelas (ormar. Model):
        Meta Kelas:
            Basis data = basis data
            Metadata = metadata
    
        Id: int = ormar. Integer (primary _ key = Benar)
        Nama: str = ormar. String (max _ length = 100)
        Negara: str = ormar. String (default = Salah, max _ length = 50, pilihan = ["UK," "US," "Vietnam," "Colombia"])
    
    # ormar > = 0,20
    Enum impor dari enum
    
    Kelas Negara (str, Enum):
        Inggris = "Inggris"
        AS = "AS"
        VIETNAM = "Vietnam"
        KOLOMBIA = "Kolombia"
    
    Kelas ArtistV20 (ormar. Model):
        ormar _ config = ormar. OrmarConfig (
            Database = database,
            Metadata = metadata,
            Tablename = "artis _ v20"
        )
    
        Id: int = ormar. Integer (primary _ key = Benar)
        Nama: str = ormar. String (max _ length = 100)
        Negara: Negara = ormar. Enum (enum _ class = Negara)
    
  • Pydantic\ _ hanya tidak lagi mendukung parameter bidang

    Bidang pydantic\ _ only telah ditinggalkan dan dihapus pada v 0,20. Ormar memungkinkan bidang pydantic didefinisikan seperti model pydantic normal.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    Basis data impor
    Asrama impor
    meter persegi import
    
    Database = database. Database ("sqlite: / / db.sqlite")
    Metadata = sqlalchemy. MetaData ()
    
    # ormar < 0,20
    Kelas Dish (ormar. Model):
        Meta Kelas:
            Basis data = basis data
            Metadata = metadata
            Nama meja = "piring"
    
        Id: int = ormar. Integer (primary _ key = Benar)
        Nama: str = ormar. String (max _ length = 100)
        Masak: str = ormar. String (max _ length = 40, pydantic _ only = Benar, default = "sam")
    
    # ormar > = 0,20
    Kelas DishV20 (ormar. Model):
        ormar _ config = ormar. OrmarConfig (
            Database = database,
            Metadata = metadata,
            Nama meja = "piring _ v20"
        )
    
        Id: int = ormar. Integer (primary _ key = Benar)
        Nama: str = ormar. String (max _ length = 100)
        Masak: str = "sam" # ini adalah bidang pydantic normal
    
  • Tidak lagi mendukung properti\ _ dekorator lapangan

    Properti\ _ dekorator lapangan digunakan untuk menyediakan cara melewati bidang komputasi yang terdapat dalam kamus / representasi JSON serial model. Versi Pydantic 2. X memperkenalkan kemungkinan ini, jadi Anda sekarang harus beralih ke versi asli Pydantic.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    Basis data impor
    Asrama impor
    meter persegi import
    Impor pydantic
    
    Database = database. Database ("sqlite: / / db.sqlite")
    Metadata = sqlalchemy. MetaData ()
    
    # ormar < 0,20
    Karyawan Kelas (ormar. Model):
        Meta Kelas:
            Basis data = basis data
            Metadata = metadata
    
        Id: int = ormar. Integer (primary _ key = Benar)
        nama _ pertama: str = ormar. String (max _ length = 100)
        Nama belakang: str = ormar. String (max _ length = 100)
    
        @ Ormar.property _ field ()
        Benar-benar nama lengkap (diri) - > str:
            Pengembalian f "{self.first_name}{self.last_name}"
    
    # ormar > = 0,20
    Kelas Karyawan V20 (ormar. Model):
        ormar _ config = ormar. OrmarConfig (
            Database = database,
            Metadata = metadata,
        )
    
        Id: int = ormar. Integer (primary _ key = Benar)
        nama _ pertama: str = ormar. String (max _ length = 100)
        Nama belakang: str = ormar. String (max _ length = 100)
    
        @ Pydantic computed _ field ()
        Benar-benar nama lengkap (diri) - > str:
            Pengembalian f "{self.first_name}{self.last_name}"
    
  • metode deprecated

    Semua metode yang tercantum di bawah ini telah tidak digunakan lagi dan akan dihapus dalam versi 0.30 dari Ormar.

    • Dict () menjadi model\ _ dump ()

      Basis data impor Asrama impor meter persegi import

      Database = database. Database ("sqlite: / / db.sqlite") Metadata = sqlalchemy. MetaData ()

      Album Kelas (ormar. Model): ormar _ config = ormar. OrmarConfig ( Database = database, Metadata = metadata, Nama tabel = "album" )

      1
      2
      3
      Id: int = ormar. Integer (primary _ key = Benar)
      Nama: str = ormar. String (max _ length = 100)
      Favorit: bool = ormar. Boolean (default = Salah)
      

      Album = Album (nama = "Sisi Gelap Bulan")

      ormar < 0,20

      album _ dict = album.dict ()

      ormar > = 0,20

      baru _ album _ dict = album.model _ dump ()

    Harap dicatat bahwa parameter tetap sama, yaitu termasuk, tidak termasuk, dll.

    • JSON () menjadi model\ _ dump\ _ json ()

       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      Basis data impor
      Asrama impor
      meter persegi import
      
      Database = database. Database ("sqlite: / / db.sqlite")
      Metadata = sqlalchemy. MetaData ()
      
      Album Kelas (ormar. Model):
          ormar _ config = ormar. OrmarConfig (
              Database = database,
              Metadata = metadata,
              Nama tabel = "album"
          )
      
          Id: int = ormar. Integer (primary _ key = Benar)
          Nama: str = ormar. String (max _ length = 100)
          Favorit: bool = ormar. Boolean (default = Salah)
      
      Album = Album (nama = "Sisi Gelap Bulan")
      
      # ormar < 0,20
      album _ json = album.json ()
      
      # ormar > = 0,20
      baru _ album _ dict = album.model _ dump _ json ()
      

      Harap dicatat bahwa parameter tetap sama, yaitu termasuk, tidak termasuk, dll.

    • Konstruksi () menjadi model\ _ konstruksi ()

      Basis data impor Asrama impor meter persegi import

      Database = database. Database ("sqlite: / / db.sqlite") Metadata = sqlalchemy. MetaData ()

      Album Kelas (ormar. Model): ormar _ config = ormar. OrmarConfig ( Database = database, Metadata = metadata, Nama tabel = "album" )

      1
      2
      3
      Id: int = ormar. Integer (primary _ key = Benar)
      Nama: str = ormar. String (max _ length = 100)
      Favorit: bool = ormar. Boolean (default = Salah)
      

      Tim = { "Nama": "Sisi Gelap Bulan," "Favorit": Benar, }

      ormar < 0,20

      Album = Album.construct (* * params)

      ormar > = 0,20

      Album = model _ konstruksi (* * params)

    Untuk mempelajari lebih lanjut tentang konstruksi, lihat dokumentasi Pydantic.

0.12.2

# #✨ fitur

  • Tingkatkan dukungan FastAPI ke versi terbaru (0.97.0) # 1110
  • Menambahkan dukungan dan pengujian untuk Python 3.11 # 1110

0.12.1

# #✨ fitur

  • Karena pemuatan rekursif dan cache model dan model terkait, kinerja model pemuatan telah meningkat pesat. (@ erichaydel - terima kasih!) # 853

# #💬 struktur internal

  • Benchmark untuk membandingkan efek kinerja dari perubahan tren yang diimplementasikan (sekali lagi, oleh @ erichaydel - terima kasih!) # 853

0.12.0

✨ perubahan besar

  • Queryset.bulk\ _ create sekarang akan meningkatkan ModelListEmptyError pada daftar model kosong (oleh @ ponytailer - terima kasih!) # 853

# #✨ fitur

  • Model.upsert () sekarang menangani bendera\ \ _ force_save_\ : bool, memungkinkan model sisipan diperbarui terlepas dari apakah mereka memiliki set kunci utama. Harap dicatat bahwa pengaturan bendera ini akan menghasilkan dua pertanyaan untuk setiap model yang di sisipkan pembaruan - > periksa apakah model itu ada dan perbarui / masukkan sesuai nanti

🐛 memperbaiki

  • Memperbaiki hubungan kosong yang menghancurkan konstruktor (oleh @ Abdeldjalil-H - terima kasih!) # 870
  • Perbaiki masalah terkait penyimpanan yang tidak menyimpan model dengan set pks (termasuk uuids) # 885
  • Perbaiki pengecualian hubungan yang salah berdasarkan urutan pengecualian # 779
  • Perbaiki properti\ _ ladang yang tidak diwarisi dengan benar # 774

0.11.3

# #✨ fitur

  • mencatat pembaruan onupdate dan operasi referensi ondelete di ForeignKey dan memberikan pencacahan Referensial Tindakan untuk menentukan perilaku suatu hubungan (oleh @ SepehrBazyar - terima kasih!) # 724
  • Menambahkan CheckColumn ke Kendala yang Didukung dalam Model Meta (oleh @ SepehrBazyar - Terima kasih!) # 729

🐛 memperbaiki

  • Perbaiki membatasi hasil kueri ke 0 harus mengembalikan daftar kosong (oleh @ SepehrBazyar - terima kasih!) # 766

# #💬 lainnya

  • Menambahkan Mode Gelap ke Dokumentasi (oleh @ SepehrBazyar - Terima kasih!) # 717
  • Perbarui ketergantungan aiomysql # 778

0.11.2

🐛 memperbaiki

  • Memperbaiki driver database diperlukan, dan mereka harus opsional.
  • Perbaiki masalah lapangan Boolean dalam kueri batas tanpa batas\ _ bendera mentah\ _ sql di postgres # 704
  • Perbaiki enum\ _ overflow kelas ke skema yang menyebabkan kesalahan di OpenAPI # 699

0.11.1

🐛 memperbaiki

  • Perbaiki masalah replikasi mendalam yang diperkenalkan di Pydantic 1.9 # 685

0.11.0

✨ perubahan besar

  • Jatuhkan dukungan untuk Python 3.6
  • Queryset.get\ _ atau\ _ buat Sekarang kembalikan tupel yang berisi model dan boolean yang menunjukkan apakah model telah dibuat (oleh @ MojixCoder - terima kasih!) # 554
  • Queryset.count () sekarang menghitung jumlah baris model induk yang berbeda secara default, Anda dapat menghitung semua baris dengan pengaturan unik = Salah (oleh @ erichaydel - terima kasih) # 588

# #✨ fitur

  • Menambahkan dukungan untuk Python 3.10

🐛 memperbaiki

  • Perbaiki perilaku lapangan JSON yang tidak konsisten dalam save and bulk\ _ create # 584
  • Perbaiki Kesalahan Kebangkitan Maksimum # 580

0.10.25

# #✨ fitur

  • menambahkan opsi kelas queryset\ _ ke Model. Meta, memudahkan untuk mengganti QuerySet dengan model Anda (oleh @ ponytailer - terima kasih!) # 538
  • memungkinkan kwarg tambahan diteruskan ke IndexColumns, yang akan diteruskan ke sqlalchemy Index (oleh @ zevisert - terima kasih) # 575

🐛 memperbaiki

  • Perbaiki pengaturan nullable untuk JSON field # 529
  • memperbaiki ketidaksesuaian byte / str dalam operasi batch saat menggunakan orjson alih-alih json (oleh @ ponytailer - terima kasih!) # 538

0.10.24

# #✨ fitur

  • Tambahkan sinyal pembaruan pos\ _ curah\ _ (oleh @ ponytailer - terima kasih!) # 524

🐛 memperbaiki

  • Memperbaiki dukungan untuk pydantic = = 1.9.0 # 502
  • Memperbaiki masalah zona waktu untuk tanggal dan waktu # 504
  • Hapus pengikatan literal dalam generasi kueri untuk membuka array postgres # / tophat /ormar-postgres-extensions/ 9
  • Perbaiki pembaruan batch dari bidang JSON # 519

# #💬 lainnya

  • meningkatkan kinerja massal\ _ buat dengan melewati database yang di jalankan\ _ banyak implementasi yang kurang optimal. (@ Mng-dev-ai Terima kasih!) # 520
  • Menit dampak. Versi database yang diperlukan adalah > = 5.4.

0.10.23

# #✨ fitur

  • Menambahkan kemampuan untuk menyampaikan komentar ke sqlalchemy saat membuat kolom # 485

🐛 memperbaiki

  • Perbaiki LargeBidang biner yang bisa kosong # 409
  • Buat ormar. Model tersedia # 413
  • Buat terlebih dahulu () dan dapatkan () hormati urutan model utama yang ditetapkan oleh pengguna tanpa parameter, mundur ke kunci utama (asc dan desc masing-masing) # 453
  • Perbaiki referensi yang salah untuk klausa non-alias join di postgress # 455

0.10.22

🐛 memperbaiki

  • Perbaikan panas untuk validator yang tidak diwariskan saat mengatur model ormar induk # 365

0.10.21

🐛 memperbaiki

  • menambahkan implementasi yang sangat besar dari metode kelas konstruktor, yang memungkinkan contoh model dibangun tanpa memvalidasi input, untuk mempercepat seluruh proses (jika data Anda sudah divalidasi) # 318
  • memperbaiki masalah dengan "mewarisi" validator lapangan dari model ormar saat menghasilkan model pydanic yang baru dibuat menggunakan get\ _ pydantic # 365

0.10.20

# #✨ fitur

  • menambahkan parameter tambahan ke Model. Meta yang menerima Extra.ignore dan Extra.forbid (default), dan mengabaikan bidang tambahan diteruskan ke model ormar, atau melempar pengecualian ketika menemukan pengecualian # 358

🐛 memperbaiki

  • "Tidak ada" tidak diperbolehkan jika lapangan dapat dibatalkan dan opsi ditetapkan # 354
  • Terlepas dari peningkatan otomatis dan pengaturan yang dapat dibatalkan secara eksplisit, selalu atur kunci Utama\ _ ke non-nol untuk menghindari masalah migrasi # 348

0.10.19

# #✨ fitur

  • Ditambahkan dukungan untuk multi-kolom non-unik IndexColumns di Meta.kendala # 307
  • menambahkan atribut medan sql\ _ nullable untuk memungkinkan pengaturan nullable yang berbeda untuk model pydantic dan kolom sql yang mendasarinya # 308

🐛 memperbaiki

  • Aktifkan diagram caching untuk meningkatkan kinerja # 337
  • Perjelas dan perbaiki dokumentasi pada bidang yang dapat dibatalkan # 339

# #💬 lainnya

  • Tingkatkan versi database yang didukung ke < = 5.2.

0.10.18

🐛 memperbaiki

  • Perbaiki urutan lapangan dalam model pydantic # 328
  • Perbaikan basis data 0.5.0 dukungan # 142

0.10.17

# #✨ fitur

  • Tipe pydantic default yang memungkinkan bidang model utama # 312
  • Ditambahkan dukungan untuk sqlalchemy > = 1.4 (membutuhkan database > = 0.5.0) # 142

0.10.16

# #✨ fitur

  • memungkinkan Anda untuk meneruskan konfigurasi pydantic Anda sendiri ke ormar. Model, yang akan digabungkan dengan konfigurasi default oleh @ naturalethic (terima kasih!) # 285
  • Menambahkan tipe bidang SmallInteger melalui @ ProgrammerPlus1998 (terima kasih!) # 297

🐛 memperbaiki

  • Skema OpenAPI pembangkit tetap dengan menghapus parameter bidang pydantic yang sudah ketinggalan zaman yang diekspos langsung dalam skema # 291
  • Perbaiki peringatan yang tidak perlu yang dihasilkan secara otomatis melalui model # 295

0.10.15

🐛 memperbaiki

  • Perbaiki masalah dengan menghasilkan pohon model pydantic menggunakan model bersarang (oleh @ pawamoy - terima kasih!) # 278
  • Perbaiki f string yang hilang sebagai peringatan tentang bidang kunci utama yang hilang # 274
  • Tetap melewati nilai-nilai kunci asing sebagai hubungan (perlindungan tambahan, tetap dalam versi terbaru) # 270

0.10.14

# #✨ fitur

  • memungkinkan melewati zona waktu: bool = Parameter palsu ke bidang Waktu dan Waktu Waktu dari kolom database yang sadar zona waktu # 264
  • memungkinkan melewati waktu data, tanggal, dan waktu untuk menyaring pada bidang DateTime, Time, dan Date untuk memungkinkan penyaringan berdasarkan waktu data alih-alih mengubah nilai menjadi string # 79

🐛 memperbaiki

  • Perbaiki ketergantungan dari psycopg2 ke psycopg2-biner # 255

0.10.13

# #✨ fitur

  • memungkinkan melewati field accessors di pilih\ _ lated dan prefetch\ _ lated. Gaya Python pilih\ _ terkait # 225.

    • Sebelumnya:

      await Post.objeks.select _ related (["penulis," "kategori"]).get () menunggu Author.objeks.prefetch _ terkait ("posting _ _ kategori").dapatkan ()

    • Sekarang juga:

      Await Post.objeks.Select _ terkait ([Post.author, Post.category]).get () menunggu Author.objeks.prefetch _ terkait (Author.posts.category).get ()

🐛 memperbaiki

  • Perbaiki nilai default utama untuk kunci utama yang diwariskan # 253

0.10.12

🐛 memperbaiki

  • Perbaiki QuerySet.buat metode tidak menggunakan init (jika kustom disediakan) # 245
  • Perbaiki pengaturan hubungan ForwardRefManyToMany tipe pydantic yang salah # 250

0.10.11

# #✨ fitur

  • menambahkan nilai dan nilai\ _ daftar ke QuerySet dan QuerysetProxy, memungkinkan sumber data asli dikembalikan dari kueri # 223.
    • Memungkinkan mengembalikan daftar tupel atau kamus dari kueri
    • Lewati parsing data menjadi model ormar, dan karena itu lewati validasi
    • Memungkinkan pengecualian model antara rantai relasional, sehingga Anda hanya dapat mengekstrak kolom yang diperlukan
    • Jika hanya satu kolom yang diekstraksi, daftar nilai\ _ memungkinkan Anda meratakan hasilnya.

🐛 memperbaiki

  • Tetap menggunakan ForwardRef # 226 untuk membuat otomatisasi melalui model relasional m2m

0.10.10

# #✨ fitur

  • menambahkan get\ _ pydantic flag untuk memungkinkan Anda menghasilkan pohon model pydantic yang setara secara otomatis dari ormar. Model. Pohon model yang baru dihasilkan ini dapat digunakan dalam permintaan dan tanggapan untuk mengecualikan bidang yang tidak ingin Anda sertakan dalam data Anda.
  • menambahkan parameter medan\ _ induk\ _ kecuali ke model Meta, memungkinkan Anda untuk mengecualikan bidang dari model induk selama pewarisan. Harap dicatat bahwa praktik terbaik adalah menggabungkan model dan campuran, tetapi jika Anda memiliki banyak model serupa dan hanya satu model berbeda, itu bisa menjadi alat yang berguna untuk mencapai tujuan ini.

🐛 memperbaiki

  • Memperbaiki filter kosong dengan paging dan hubungan (milik @ erichaydel) # 214
  • Perbaiki jika tidak disimpan sebelum # 216, objek anak tidak akan disimpan di sisi sebaliknya dari hubungan

# #💬 lainnya

  • Perluas bagian FastAPI dari dokumentasi untuk menunjukkan contoh penggunaan Ormar dalam permintaan dan tanggapan FastAPI.
  • Peningkatan dokumentasi pada nilai default, ForeignKey.add, dan banyak lagi.

0.10.9

# # Perbaikan keamanan penting

  • Perbarui pin pydantic untuk memperbaiki bug keamanan CVE-2021-29510

Disarankan agar Anda memperbarui ke versi pydantic yang ditambal. 0.10.9, ormar mengecualikan versi dengan kerentanan dalam ketergantungan tetap.

🐛 memperbaiki

  • Perbaiki Arsitektur OpenAPI LargeBinary # 204

0.10.8

🐛 memperbaiki

  • Perbaiki default bantalan di pk\ _ hanya submodel # 202
  • Perbaiki mypy # 199 untuk bidang LargeBinary menggunakan representasi str base64
  • Perbaiki format skema OpenAPI untuk bidang LargeBinary dengan representasi Base64 str # 199
  • Perbaiki pengkodean seleksi OpenAPI untuk bidang LargeBinary dengan representasi str Base64

0.10.7

# #✨ fitur

  • Menambahkan tag exclude_primary_keys: bool = False ke metode diktus (), memungkinkan semua kolom kunci utama dalam kamus yang dihasilkan dikecualikan. Bab 164
  • menambahkan bendera exclude_through_models: bool = False dict (), memungkinkan semua model dikecualikan dari ManyToMany hubungan # 164
  • Menambahkan represent_as_base64_str: bool = False untuk memungkinkan konversi byte LargeBidang biner ke parameter string dikodekan base64. Saat mengakses properti, string dikembalikan dalam dekrit () dan string dikonversi menjadi byte saat diatur. Data dalam database disimpan dalam byte. Bab 187
  • Tambahkan pk alias untuk memungkinkan Model.pk mengakses bidang dalam filter dan urutan berdasarkan klausa (gaya python)

🐛 memperbaiki

  • Hapus default Tidak ada opsi untuk maks\ _ panjang bidang LargeBinary # 186
  • Hapus default Tidak ada opsi untuk bidang string maks\ _ length

# #💬 lainnya

  • Bimbingan dan contoh untuk memberikan dekrit () parameter dalam dokumentasi
  • Refaktoring utama mendapatkan / mengatur properti dalam metode sihir untuk deskriptor - > peningkatan kinerja yang signifikan

0.10.6

# #✨ fitur

  • Tambahkan LargeBinary (max\ _ length) tipe bidang # 166

  • menambahkan dukungan untuk bidang Pydantic normal (termasuk model) alih-alih atribut Pydantic\ _ only, yang sekarang tidak digunakan lagi # 160. Bidang piramida harus dinyatakan normal seperti pada model pydantic di sebelah bidang ormar. Perhatikan bahwa (jelas) ormar tidak menyimpan dan memuat nilai bidang ini dalam database, yang berarti bahwa salah satu dari berikut ini harus benar:

    • Bidang Pydantic yang dinyatakan pada model ormar harus opsional (default adalah Tidak Ada).
    • Bidang pydantic harus diatur ke nilai default
    • Bidang pydantic memiliki set fungsi pabrik\ _ default
    • Sebuah ormar. Model dengan bidang pydantic harus menimpa\ __init_\ _ () dan memberikan nilai di sana

    Jika tidak satu pun dari ormar di atas (atau lebih tepatnya pydantic) gagal selama memuat data dari database, dan nilai yang diperlukan untuk bidang pydantic yang dinyatakan hilang.

  • Ormar sekarang memberikan contoh yang berarti dalam pola openapi, termasuk model bersarang. Gunakan algoritma yang sama seperti dict () dan pilih / load\ _ semua untuk mengulangi model yang relevan tanpa melihat. Contoh juga muncul di fastapi. Bab 157

🐛 memperbaiki

  • Secara default, pydantic tidak memvalidasi bidang selama alokasi, yang bukan pengaturan ideal untuk ORM. Sekarang semua ormar. Model mengaktifkan validasi selama alokasi (misalnya model.kolom = 'nilai').

# #💬 lainnya

  • Tambahkan koneksi ke database di QuickStart di readme # 180 Arsitektur* OpenAPI tidak lagi menyertakan ormar. Model string dokumen sebagai deskripsi, jika Anda tidak memberikan string dokumen Anda sendiri, hanya nama model.
  • Beberapa peningkatan kinerja.

0.10.5

🐛 memperbaiki

  • Memperbaiki bug di fastapi-pagination # 73
  • menghapus Opsional # 174 yang tidak perlu dari Daftar\ [Opsional\ [T]] dalam QuerySet.all () dan Querysetproxy.all () nilai pengembalian
  • Tingkat cakupan uji lari hanya dirilis pada PRS internal, bukan dalam operasi GitHub.

0.10.4

# #✨ fitur

  • Menambahkan filter dan order_by bergaya Python menggunakan akses lapangan alih-alih senar dunder-delimited. Bab 51
    • Mengakses bidang melalui akses properti (dot chain) dapat digunakan untuk membangun FilterGroups (ormar.and_ Dan ormar._) Akses lapangan* membebani satu set operator Python dan menyediakan satu set fungsi untuk memungkinkan fungsionalitas yang sama dengan nama parameter dunder-delimited di**kwargs, yang berarti bahwa dari contoh model Track yang terkait dengan Album Model Sekarang Anda memiliki lebih banyak opsi:
      • Tepat - cocok persis dengan nilai, kolom sql =
        • lama: album\ __nama_\ _ tepat = 'Malibub'
        • Baru: bisa juga ditulis sebagai Track.album.name = = 'Malibu
      • iexactly - cocok persis kolom sql =(kasus tidak sensitif)
        • lama: album\ __name_\ _ iexactly = 'malibu'
        • Baru: juga dapat ditulis sebagai Track.album.name.iexact('malibu')
      • berisi - kolom sql SEPERTI '%%'
        • Lama: album\ __Nama_\ _ mengandung = 'Mal'
        • Baru: juga dapat ditulis sebagai Track.album.name% 'Mal')
        • Baru: juga dapat ditulis sebagai Track.album.name.contains('Mal') Ikon* - kolom sql SEPERTI '%%' (kasus tidak sensitif)
        • lama: album\ __nama_\ _ icontains = 'males'
        • Baru: juga dapat ditulis sebagai Track.album.name.icontains('mal')
      • Di -sql column IN (<VALUE1>, <VALUE2>, ...)
        • Tua: album__name__in=['Malibu', 'Barclay']
        • Baru: juga dapat ditulis sebagai Track.album.name << ['Malibu', 'Barclay']
        • Baru: juga dapat ditulis sebagai Track.album.name.in_(['Malibu', 'Barclay'])
      • Isnull - sql kolom IS NULL (dan sql kolom IS NOT NULL)
        • lama: album\ __name__isnull = Benar (isnotnullalbum__name_\ _ isnull = Salah)
        • Baru: juga dapat ditulis sebagai Track.album.name > > tidak ada
        • Baru: bisa juga ditulis sebagai Track.album.name isnull (True)
        • Baru: tidak nol juga bisa ditulis sebagai Track.album.name.isnull(False)
        • Baru: tidak null juga dapat ditulis sebagai ~ (Track.album.name > > Tidak ada)
        • Baru: tidak nol juga bisa ditulis sebagai ~(Track.album.name.isnull(True))
      • gt - kolom sql >(lebih besar dari)
        • Tua: posisi\ _\ _ gt = 3
        • Baru: juga dapat ditulis sebagai Track.album.name > 3
      • gte - kolom sql > =(lebih besar dari atau sama dengan)
        • Tua: posisi\ _\ _ gte = 3
        • Baru: dapat juga ditulis sebagai Track.album.name > = 3
      • lt - kolom sql <(di bawah)
        • Tua: posisi\ _\ _ lt = 3
        • Baru: juga dapat ditulis sebagai Track.album.name < 3
      • lte - kolom sql < =(kurang dari atau sama dengan)
        • Tua: posisi\ _\ _ lte = 3
        • Baru: juga dapat ditulis sebagai Track.album.name < = 3
      • startswith - kolom sql SEPERTI '%' (pertandingan awal yang tepat)
        • Lama: album\ __Nama_\ _ startswith = 'Mals'
        • Baru: juga dapat ditulis sebagai Track.album.name.startswith('Mal')
      • istartswith - kolom sql SEPERTI '%' (kasus tidak sensitif)
        • Tua: album__name__istartswith='mal'
        • Baru: juga dapat ditulis sebagai Track.album.name.istartswith('mal')
      • endswith - kolom sql SEPERTI '%' (pertandingan akhir lengkap)
        • : album\ \ nama_\ _ endswith = 'ibu'
        • Baru: juga dapat ditulis sebagai Track.album.name.endswith('ibu')
      • iendswith - kolom sql SEPERTI '%' (case tidak sensitif)
        • lama: album\ __nama_\ _ iendswith = 'IBU'
        • Baru: juga dapat ditulis sebagai Track.album.name.iendswith('IBU')
  • Anda tidak hanya dapat menyediakan Grup Filter di filter () dan kecuali (), tetapi juga di:
    • Mendapatkan ()
    • Dapatkan atau tidak ()
    • Dapatkan atau buat ()
    • Yang pertama ()
    • Semua ()
    • Hapus ()
  • Melalui Grup Filter (ormar.and_ Dan ormar._), Anda sekarang dapat menggunakan:
    • & - sebagai dan\ _ alih-alih bersarang di level berikutnya
    • | - sebagai "atau\ _" alih-alih bersarang di level berikutnya
    • ~ - sebagai negasi grup filter
  • Untuk menggabungkan beberapa set filter menjadi satu set kondisi, gunakan & (sql AND) dan | (sql OR).

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    # Pertanyaan berikut setara:
    # sql: (product.name = 'Uji' DAN produk.rating > = 3.0)
    
    # ormar OPTION 1 - OLD one
    Produk.objeks.filter (nama = 'Tes', peringkat _ _ gte = 3.0).dapatkan ()
    
    # ormar OPTION 2 - YANG LAMA
    Produk.objeks.filter (ormar.and _ (nama = 'Tes', peringkat _ _ gte = 3.0)).get ()
    
    # ormar OPTION 3 - BARU satu (akses lapangan)
    Product.objeks.filter ((Product.name = = 'Uji') & (Product.rating > = 3.0)).get ()
    
  • Hal yang sama berlaku untuk filter kompleks bersarang

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    # Pertanyaan berikut setara:
    # sql: (product.name = 'Uji' DAN produk.rating > = 3.0)
    # OR (categories.name IN ('Mainan', 'Buku'))
    
    # ormar OPTION 1 - OLD one
    Produk.objeks.filter (ormar. atau _ (
                              Ormar.and _ (nama = 'Tes', peringkat _ _ gte = 3.0),
                              kategori _ _ name _ _ in = ['Mainan', 'Buku'])
                          ). mendapatkan ()
    
    # ormar OPTION 2 - BARU satu (bukan bersarang atau menggunakan `|`)
    Produk.objeks.filter (
                          Ormar.and _ (nama = 'Tes', peringkat _ _ gte = 3.0) |
                          Ormar. dan _ (kategori _ _ name _ _ in = ['Mainan', 'Buku'])
                          ). mendapatkan ()
    
    # ormar OPTION 3 - BARU satu (akses lapangan)
    Produk.objeks.filter (
                          ((Product.name = 'Test') & (Product.rating > = 3.0)) |
                          (Product.categories.name < < ['Mainan', 'Buku'])
                          ). mendapatkan ()
    
  • Sekarang Anda juga dapat menggunakan akses lapangan untuk memberikan OrderActions untuk memesan\ _ by ()

    • Dalam urutan menaik:
      • Tua: Product.objects.order_by("name").all()
      • Baru: Product.objects.order_by(Product.name.asc()).all()
    • Urutan turun:
      • Tua: Product.objects.order_by("-name").all()
      • Baru: Product.objects.order_by(Product.name.desc()).all()
    • Tentu saja, Anda juga dapat menggabungkan model yang berbeda dan banyak pesanan\ _ by: Product.objects.order_by([Product.category.name.asc(), Product.name.desc()]).all()

🐛 perbaikan

  • sebenarnya bukan bug, tapi inkonsistensi. Menyediakan filter dengan model bersarang, yaitu album\ _kategori_\ _ name = 'AA' sedang memeriksa apakah album dan model kategori termasuk dalam pilih_lated (), dan jika tidak, mereka secara otomatis ditambahkan di sana. Fungsionalitas yang sama tidak bekerja dengan FilterGroups (dan_dan atau\ ), sekarang bekerja (juga bekerja dengan filter gaya Python yang mengembalikan FilterGroups).

0.10.3

✨ fitur

  • foreignKey dan ManyToBanyak sekarang mendukung lewati\ _ reverse: bool = Bendera palsu # 118. Jika Anda mengatur bendera lewati\ _ mundur secara internal, bidang masih terdaftar di ujung lain hubungan, sehingga Anda dapat:

    • Filter dengan bidang model yang relevan dalam model terbalik
    • Pesanan\ _ oleh Bidang Model Terkait dalam Model Terbalik

    Tapi Anda tidak bisa:

    • Gunakan\ _ nama terkait untuk mengakses bidang terkait dari model terbalik
    • Bahkan jika Anda memilih korelasi dari sisi sebaliknya model, model yang dikembalikan tidak akan diisi dalam contoh terbalik (tidak akan memblokir koneksi, jadi Anda masih dapat memfilter dan memesan\ _ by)
    • Hubungan ini tidak dihuni menjadi dict () dan json ()
    • tidak dapat melewati objek terkait bersarang ketika dihuni dari dict () atau json () (juga melalui fastapi). Tergantung pada pengaturan tambahan dalam konfigurasi pydantic, itu akan diabaikan atau kesalahan dilemparkan.
    • Model.save\ _ lated () sekarang dapat menyimpan seluruh pohon data sekaligus # 148 berarti:

    • Ia tahu apakah model master atau model terkait harus disimpan terlebih dahulu untuk menjaga hubungan

    • Ini menyelamatkan model master jika

      • Itu tidak diawetkan.
      • Tidak ada nilai pk
      • Atau simpan\ _ all = Bendera asli sudah diatur

      Dalam kasus ini, Anda tidak perlu membagi penyimpanan menjadi dua panggilan (simpan () dan simpan\ _ lated ())

    • Ini juga mendukung hubungan banyak-ke-banyak

    • Ini juga mendukung opsional Melalui nilai model untuk hubungan m2m

  • Menambahkan kemungkinan untuk menyesuaikan dengan model nama bidang hubungan.

  • Secara default, nama model terkait adalah huruf kecil dengan nama hubungan model. Jadi dalam contoh seperti ini:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    ... # # deklarasi saja dihilangkan
    Siswa Kelas (ormar. Model):
        Meta Kelas:
            Basis data = basis data
            Metadata = metadata
    
        Id: int = ormar. Integer (primary _ key = Benar)
        Nama: str = ormar. String (max _ length = 100)
        Kursus = ormar. Banyak (Kursus)
    
    # # akan menghasilkan default Melalui model seperti berikut (contoh disederhanakan)
    Kelas StudentCourse (ormar. Model):
        Meta Kelas:
            Basis data = basis data
            Metadata = metadata
            Tablename = "siswa _ kursus"
    
        Id: int = ormar. Integer (primary _ key = Benar)
        Siswa = ormar. ForeignKey (Siswa) # # nama default
        Kursus = ormar. ForeignKey (Kursus) # nama default
    
  • Untuk menyesuaikan nama bidang / hubungan dalam model Melalui, sekarang Anda dapat menggunakan parameter baru ManyToMany:

    • Melalui\ _ hubungan\ _ nama - nama bidang yang mengarah ke model yang menyatakan ManyToMany
    • Melalui\ _ reverse\ _ relationship\ _ name - ke nama bidang model yang mengarah ke ManyToMany

    Contoh:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    ... # deklarasi saja dihilangkan
    Siswa Kelas (ormar. Model):
        Meta Kelas:
            Basis data = basis data
            Metadata = metadata
    
        Id: int = ormar. Integer (primary _ key = Benar)
        Nama: str = ormar. String (max _ length = 100)
        Kursus = ormar. Banyak (Kursus,
                                   melalui _ relationship _ name = "student _ id,"
                                   melalui _ reverse _ relation _ name = "course _ id")
    
    # akan menghasilkan default Melalui model seperti berikut (contoh disederhanakan)
    Kelas StudentCourse (ormar. Model):
        Meta Kelas:
            Basis data = basis data
            Metadata = metadata
            Tablename = "siswa _ kursus"
    
        Id: int = ormar. Integer (primary _ key = Benar)
        student _ id = ormar. ForeignKey (Student) # set oleh through _ relation _ name
        course _ id = ormar. ForeignKey (Course) # set oleh through _ reverse _ relation _ name
    

🐛 perbaikan

  • Perbaiki kelemahan wasit Kesalahan # 118
  • Perbaiki bug yang dilemparkan melalui bidang saat mengatur Config.extra = "dilarang"
  • memperbaiki pydantic. PrivateAttr tidak diinisialisasi pada\ __init_\ _ error # 149
  • memperbaiki kesalahan pengecualian tipe pydantic dalam dict () dan\ __semua_\ _ key tidak berfungsi

💬lainnya

  • Link ke sqlalchemistry-to-ormar penerjemah otomatis untuk memperkenalkan model
  • Berikan tautan ke perpustakaan ekosistem FastAPI yang mendukung ormar
  • Tambahkan transaksi ke dokumen (dukungan database)

0.10.2

✨ fitur

  • Model.save_related(follow=False) Sekarang dua parameter tambahan juga diterima: Model.save_related(follow=False, save_all=False, exclude=None) ...
    • save\ _ all: bool - > secara default (jadi save\ _ all = False) pembaruan ormar hanya menyisipkan model yang belum disimpan (jadi model baru atau yang diperbarui), dengan save\ _ all = Benar semua model terkait disimpan terlepas dari status save, ini dalam kasus berikut Mungkin berguna untuk memperbarui model dari panggilan API, sehingga tidak berubah pada backend.
    • exclude: Union[Set, Dict, None] - > Atur / Kamus Hubungan untuk mengecualikan dari simpan, bahkan jika mengikuti = Benar dan menyimpan\ _ semua = Benar digunakan. Untuk mengecualikan hubungan bersarang, lulus kamus bersarang, misalnya: exclude={"child":{"sub_child": {"exclude_sub_child_realtion"}}} Nilai yang diizinkan mengikuti skema metode field / kecualikan\ _ fields (dari QuerySet), jadi jika ragu, Anda dapat merujuk ke dokumentasi dalam kueri - > Pilih Word Set - > Fields Metode Model.update () sekarang menerima\ _ kolom: Daftar\ [str] = Tidak ada parameter, yang menerima daftar nama kolom untuk diperbarui. Jika dilewati, hanya kolom tersebut yang akan diperbarui dalam database. Perhatikan bahwa pembaruan () tidak menyegarkan contoh model Anda, jadi jika Anda mengubah lebih banyak kolom daripada yang Anda lewati di daftar\ _ kolom, contoh model Anda akan memiliki nilai yang berbeda dari database! Metode Model.model\ _ dump () sebelumnya hanya berisi model terkait langsung atau model bersarang (jika tidak dapat dibatalkan dan tidak virtual), sekarang semua model terkait yang sebelumnya tidak diakses tanpa loop terkandung dalam dict (). Ini tidak boleh rusak karena lebih banyak data akan dibuang ke kamus, tetapi tidak boleh hilang.
  • QuerySet.delete(each=False, **kwargs) Sebelumnya, Anda diminta untuk melewati filter (via**Kwargs baik sebagai filter terpisah () panggilan) atau pengaturan masing-masing = Benar sekarang juga menerima panggilan eksklusif () yang menghasilkan filter BUKAN. Oleh karena itu, Anda perlu mengatur masing-masing = Benar untuk menghapus seluruh tabel atau setidaknya satu filter / tidak termasuk klausa.
  • Hal yang sama berlaku untuk QuerySet.update(each=False, **kwargs) sebelum juga mengharuskan Anda untuk melewati filter (baik melalui**kwargs atau sebagai filter terpisah () panggilan) atau pengaturan masing-masing = Benar sekarang juga menerima kecuali (yang menghasilkan filter TIDAK). ) panggilan. Oleh karena itu, Anda perlu mengatur setiap = Benar untuk memperbarui seluruh tabel atau setidaknya satu filter / mengecualikan klausa.
  • Hal yang sama berlaku untuk QuerysetProxy.update(each=False, **kwargs) Anda juga diminta untuk melewati filter (via**Kwargs baik sebagai filter terpisah () panggilan) atau pengaturan masing-masing = Benar sekarang juga menerima kecuali () panggilan yang menghasilkan filter BUKAN. Oleh karena itu, Anda perlu mengatur masing-masing = Benar untuk memperbarui seluruh tabel atau setidaknya satu filter / mengecualikan klausa.

🐛 perbaikan

  • Perbaiki resolusi bidang relasional yang salah dalam QuerysetProxy jika kolom fk memiliki alias database yang berbeda.
  • Memperbaiki bug rekursif dengan struktur model yang sangat kompleks dengan loop saat memanggil dict ().
  • Memperbaiki bug ketika dua bidang non-relasional digabungkan (ditambahkan) dalam hasil kueri ketika mereka tidak relasional (yaitu JSON)
  • Memperbaiki bug yang menggunakan nama relasional yang sama dalam rantai selama terjemahan dari daftar ke kamus, tetapi menghasilkan model yang berbeda
  • Perbaiki massal\ _ buat kesalahan saat mencoba menyelamatkan properti\ _ dekorator lapangan dan bidang pydantic
  • Perbaiki penggabungan buruk rantai bersarang dalam dengan hubungan terbalik

💬lainnya

  • optimasi kinerja
  • Pisahkan tes menjadi paket berdasarkan area pengujian

0.10.1

fitur

  • menambahkan metode get\ _ or\ _ none (**kwargs) ke QuerySet dan QuerysetProxy. Ini persis sama dengan get (**kwargs), tetapi jika tidak ada catatan database yang cocok dengan kondisi tersebut, dapatkan\ _ atau\ _ tidak ada yang tidak menaikkan ormar. Tidak cocok pengecualian dan hanya mengembalikan Tidak ada.

perbaikan

  • Perbaiki masalah di mana nama kolom terkait dialek dan referensi nama tabel dalam urutan\ _ berdasarkan klausa tidak berfungsi dengan baik di postgres.

0.10.0

istirahat

  • Dukungan yang dihapus untuk notasi definisi bidang yang sudah lama tidak digunakan di mana Anda menggunakan medan ormar sebagai petunjuk tipe, yaitu. test_field: ormar.Integger() = None
  • meningkatkan jenis petunjuk - > mypy dapat dengan benar menyelesaikan bidang model terkait (ForeignKey dan ManyToMany) serta jenis pengembalian metode QuerySet. Mereka yang disebutkan sekarang mengembalikan model yang benar (yaitu Buku) bukan ormar. Tipe model. Hubungan dan kebalikan dari metode QuerysetProxy masih memiliki masalah, untuk memudahkan petunjuk tipe yang sekarang kembali Any. Perbaikan parsial # 112.

fitur

  • menambahkan metode untuk select_all(follow: bool = False) QuerySet dan QuerysetProxy. Ini mirip dengan metode load\ _ all () model, tetapi dapat digunakan langsung dalam pertanyaan. Secara default pilih\ _ semua () hanya menambahkan model yang terkait secara langsung, dan jika mengikuti = Benar juga menambahkan model terkait model terkait tanpa perulangan dalam hubungan. Perhatikan bahwa ini bukan dan mengakhiri model asinkron, jadi Anda masih harus mengeluarkan get (), semua (), dll, karena pilih\ _ semua () mengembalikan QuerySet (atau proxy) seperti field () atau order\ _ by ().

struktur internal

  • Bidang Ormar tidak lagi disimpan sebagai kelas dalam kamus Meta.model\ _ bidang, tetapi sebagai contoh.

0.9.9

fitur

  • Tambahkan kemungkinan untuk mengubah urutan default hubungan dan model.
    • Untuk mengubah urutan model, urutan lulus\ _ by =\ [kolom] di mana kolom: Daftar\ [str] ke model metaclass
    • Untuk mengubah urutan hubungan\ _ by, urutan lulus\ _ by =\ [kolom] di mana kolom: Daftar\ [str]
    • Untuk mengubah urutan hubungan terbalik\ _ by pass terkait\ _ order\ _ by =\ [kolom] di mana kolom: Daftar\ [str] Parameter* dapat berupa nama kolom atau -{col_name}diurutkan dalam urutan menurun
    • Dalam suatu hubungan, Anda hanya dapat mengurutkan berdasarkan kolom model yang terkait langsung, atau untuk kolom banyak-ke-banyak, Anda juga dapat mengurutkan berdasarkan kolom model "{through_field_name}__{column_name}"
    • Urutan\ _ berdasarkan klausa diterapkan dalam urutan berikut:
      • Secara eksplisit lulus pesanan\ _ oleh () panggilan dalam kueri
      • Jika ada hubungan dengan perintah\ _ by
      • Model pesanan metaclass\ _ oleh
      • Model kolom kunci utama ASC (fallback, digunakan jika tidak ada di atas yang disediakan)
  • Tambahkan empat fungsi agregat baru - > min, max, sum, dan avg adalah padanan SQL yang sesuai.
    • Anda dapat melewati satu atau lebih nama kolom, termasuk kolom terkait.
    • Mulai sekarang, setiap kolom yang dilewati digabungkan satu per satu (jadi jumlah (col1 + col2) tidak mungkin, Anda dapat menggunakan jumlah (col1, col2) dan kemudian tambahkan jumlah 2 yang dikembalikan dalam python)
    • Anda tidak dapat menjumlahkan dan rata-rata kolom non-numerik
    • Jika kolom dikumpulkan, satu nilai dikembalikan langsung sebagai hasilnya
    • Jika Anda mengumpulkan beberapa kolom, kembalikan kamus dengan kolom: pasangan hasil
  • menambahkan 4 sinyal baru - > pra\ _ relasi\ _ tambahkan, posting\ _ relasi\ _ tambahkan, pra\ _ relasi\ _ hapus dan posting\ _ relasi\ _ hapus Sinyal baru yang ditambahkan dari dipancarkan terhadap kebalikan dari hubungan ManyToMany (kedua belah pihak) dan hubungan orang asing (sama dengan QuerysetProxy publik). Sinyal menerima parameter berikut: pengirim: Tipe\ [Model] - Kelas pengirim, contoh: Model - Tambahkan contoh model terkait, anak: Model - Model ditambahkan, relasi\ _ nama: str - Tambahkan relasi anak-anak Nama-nama, seperti sinyal tambah, juga dilewatkan melalui\ _ kwargs: Dictionary - kamus kwargs dilewatkan untuk menambahkan ()

perubahan

  • Sekarang, dengan menetapkan model hubungan banyak-ke-banyak selama pembuatan, penghapusan, dan pembaruan, Anda tidak hanya dapat memberikan petunjuk kenaikan otomatis sebagai kunci utama, tetapi juga jenis kolom apa pun dengan fungsionalitas default.
  • Karena model Melalui sekarang instantiated, Anda juga dapat berlangganan untuk menyimpan / memperbarui / menghapus sinyal sebelum / sesudah model Melalui
  • Penerima sinyal pra\ _ pembaruan sekarang juga mendapatkan argumen Passed\ _ args, yang merupakan kamus (jika ada) nilai yang diteruskan ke fungsi pembaruan (jika tidak, kamus kosong).

perbaikan

  • Sekarang kirim sinyal pra\ _ pembaruan sebelum mengambil nilai sehingga Anda dapat memodifikasi instance yang dilewatkan di tempat dan nilai field yang dimodifikasi akan tercermin dalam database
  • Pembaruan\ _ massal sekarang juga dapat menggunakan jenis kolom kunci utama UUID dengan benar

0.9.8

fitur

  • Tambahkan kemungkinan untuk mengenkripsi bidang yang dipilih dalam database
    • Minimal Anda perlu memberikan enkripsi\ _ rahasia dan enkripsi\ _ backend
    • enkripsi\ _ backend bisa menjadi salah satu dari ormar. EncryptBackends enumerasi (NONE, FERNET, HASH, CUSTOM) - Default: NONE
    • Saat memilih backend khusus, Anda perlu menyediakan kelas backend yang subclass atau lapangan. EncryptBackend
    • Anda tidak dapat mengenkripsi kolom\ _ kunci Primer dan seri relasional (FK dan M2M).
    • Menyediakan dua backends: HASH dan FERNET
      • HASH adalah hash satu arah (seperti kata sandi) yang tidak pernah didekripsi saat diambil
      • FERNET adalah backend enkripsi / dekripsi dua arah
    • Harap dicatat bahwa di backend FERNET, Anda benar-benar kehilangan kemungkinan penyaringan karena bagian dari nilai terenkripsi adalah stempel waktu.
    • Perhatikan bahwa dalam backend HASH, Anda dapat memfilter dengan nilai penuh, tetapi filter seperti yang mengandung tidak akan berfungsi karena nilai terenkripsi dibandingkan
    • Perhatikan bahwa menambahkan enkripsi\ _ backend mengubah jenis kolom database menjadi TEXT, yang perlu tercermin dalam db dengan migrasi atau perubahan manual

perbaikan

  • (lanjutan / internal) mengembalikan fungsi tipe sqlalchemy kustom yang berhenti bekerja (melalui jenisnya. Subclass TypeDecorator), jadi proses\ _ hasil\ _ nilai

0.9.7

fitur

  • Tambahkan operator isnull untuk menyaring dan mengecualikan metode.

    1
    2
    Album _ _ name _ _ isnull = True # (sql: album.name adalah null)
    Album _ _ name _ _ isnull = Salah # (sql: album.name tidak batal))
    
  • menambahkan ormar.or_dan ormar.and_fungsi yang dapat digunakan untuk menggabungkan kueri kompleks dengan kondisi bersarang. Contoh kueri:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    Buku = (
        await Book.objeks.pilih _ terkait ("penulis")
        . Filter (
            Atau. dan _ (
                Ormar. atau _ (tahun _ _ gt = 1960, tahun _ _ lt = 1940),
                penulis _ _ name = "J.R.R. Tolkien,"
            )
        )
        . Semua ()
    )
    

    Periksa dokumen terbaru dalam kueri - > Filter dan sortir - > Filter kompleks

lainnya

  • Menetapkan nilai default pada ForeignKey atau ManyToMany menimbulkan pengecualian ModelDefinition karena (dan) tidak didukung

0.9.6

# penting

  • melalui banyak-ke-banyak model relasional sekarang menjadi opsional. Ini bukan perubahan besar karena jika Anda menyediakannya, semuanya akan bekerja seperti sebelumnya. Jadi jika Anda tidak ingin atau perlu "melewati" bidang lain pada model, Anda dapat melewatkannya. Harap dicatat bahwa itu akan dibuat secara otomatis untuk Anda dan masih harus dimasukkan dalam contoh migrasi alembik. Jika Anda ingin menghapus database yang ada, periksa konvensi penamaan default untuk menyesuaikan struktur database yang ada.

    Perhatikan bahwa jika Anda ingin menyesuaikan nama model Melalui atau database & nama tabel, Anda tetap harus menyediakannya.

fitur

  • menambahkan metode pembaruan ke QuerysetProxy, sehingga model terkait sekarang dapat diperbarui langsung dari model induk dalam hubungan ManyToMany serta dari hubungan kunci asing terbalik. Perhatikan bahwa pembaruan seperti di QuerySetupdate mengembalikan jumlah model yang diperbarui dan tidak memperbarui model terkait pada model induk. Untuk mendapatkan data segar pada model induk, Anda perlu menyegarkan model terkait (yaitu await model_instance.related.all()).
  • menambahkan load_all(follow=False, exclude=None) Metode model, yang memungkinkan contoh model saat ini dan semua model terkait dimuat dalam satu panggilan. Secara default, itu hanya memuat model yang terkait secara langsung, tetapi pengaturan mengikuti = Benar menyebabkan pohon dilalui (menghindari loop). Anda juga dapat melewati parameter pengecualian yang sama dengan metode QuerySet.exde\ _ fields ().
  • Menambahkan kemungkinan untuk menambahkan lebih banyak bidang pada model Melalui hubungan banyak-ke-banyak:
    • Nama bidang model tembus adalah nama huruf kecil dari kelas Melalui
    • Anda dapat melewati bidang tambahan (pada QuerysetProxy) saat menelepon tambahkan (anak,**kwargs) pada suatu hubungan
    • Ketika salah satu argumen kata kunci harus menjadi nama model dengan kamus nilai, Anda dapat melewati bidang lain pada panggilan relasional (pada QuerysetProxy) untuk membuat (**kwargs)
    • Anda dapat memesan melalui bidang model.
    • Anda dapat memfilter berdasarkan bidang model
    • Anda dapat menyertakan dan mengecualikan bidang berdasarkan model
    • Tambahkan model hanya ke model terkait (yaitu, jika Anda menanyakan dari A ke B - > hanya di B)
    • Harap dicatat bahwa model pass-through secara eksplisit dimuat tanpa hubungan - > hubungan dihuni di bidang ManyToMany.
    • Perhatikan bahwa seperti sebelumnya Anda tidak dapat menyatakan bidang relasional melalui model, mereka akan dihuni untuk Anda oleh ormar, tetapi sekarang jika Anda mencoba melakukannya, itu akan membuang ModelDefinitionError
    • Periksa ManyToBanyak dokumentasi hubungan yang diperbarui untuk informasi lebih lanjut

lainnya

  • Dokumentasi dan dokumentasi API yang diperbarui
  • Refactoring dan optimasi terutama melibatkan filter, pengecualian, dan kriteria penyortiran

0.9.5

perbaikan

  • Perbaiki masalah pembuatan FieldInfo pydantic setelah memperbarui pydantic ke versi > = 1.8
  • Memperbaiki versi ketergantungan yang diperlukan untuk menghindari situasi seperti itu di masa depan

0.9.4

perbaikan

  • Pembuatan skema OpenAPI fastapi tetap untuk dokumentasi otomatis ketika beberapa model merujuk ke model terkait yang sama

0.9.3

perbaikan

  • Memperbaiki masalah di mana bidang JSON lolos ganda saat menetapkan nilai setelah inisialisasi
  • Perbaiki masalah di mana bidang JSON tidak sesuai dengan pengaturan lapangan kosong karena struktur internal pydantic
  • Fix validasi seleksi untuk bidang JSON
  • Perbaiki opsi yang tidak divalidasi saat mengatur properti setelah inisialisasi
  • Perbaiki opsi yang tidak divalidasi selama panggilan pembaruan QuerySet

0.9.2

lainnya

  • Memperbarui awal cepat dalam file dokumentasi / readme
  • Dokumentasi yang diperbarui dengan tautan ke subhalaman kueri
  • Menambahkan lencana untuk iklim dan unduhan kode

0.9.1

fitur

  • Tambahkan nilai opsi ke spesifikasi OpenAPI agar terlihat seperti bidang Enum asli dalam skema yang dihasilkan.

perbaikan

  • Ketika bidang khusus belum diinisialisasi tetapi dilewatkan sebagai string, dll, gunakan fastapi untuk memperbaiki perilaku seleksi.

0.9.0

penting

  • brake fix: Release 0.8.0 memperkenalkan bug yang mencegah kendala kunci asing dari yang dihasilkan dalam database, baik dalam alembic atau selama penciptaan melalui sqlalchemy.engine.
  • Oleh karena itu, jika Anda menggunakan versi > = 0.8.0, sangat disarankan agar Anda memperbarui, karena meskipun sebagian besar fungsi ormar berjalan, database yang dibuat dengan ormar (atau ormar + alembic) tidak relevan dan akan menderita kinerja dan integritas data.
  • Jika Anda menggunakan ormar untuk terhubung ke database yang ada, kinerja dan integritas Anda harus baik, tetapi Anda harus memperbarui untuk mencerminkan semua pembaruan skema di masa mendatang dalam model.

istirahat

  • Terobosan: Semua kunci asing dan kendala unik sekarang memiliki nama, sehingga alembic dapat mengenalinya di database tanpa bergantung pada database
  • korupsi: Selama konstruksi model, jika metaclass model tidak mengandung metadata atau database, ModelDefinitionError sekarang akan diangkat bukan Atribut generik Error.
  • Rusak: Kode / database yang digunakan untuk menjalankan kueri tidak memiliki kumpulan koneksi untuk backend SQLite, yang berarti bahwa setiap kueri di jalankan dengan koneksi baru, dan kendala kunci asing paksa tidak dapat diaktifkan karena dimatikan secara default pada setiap koneksi. Ini telah berubah dalam ormar sejak > = 0.9.0, di mana secara default setiap query sqlite3 memiliki "PRAGMAForeign\ _ keys = 1;" berjalan, sehingga setiap koneksi sqlite3 sekarang memberlakukan kendala kunci asing secara default, termasuk cascading.

lainnya

  • Perbarui dokumentasi API.
  • Tambahkan tes untuk membuat fk di database dan koneksi cascading di database

0.8.1

fitur

  • menjelaskan penanganan ForwardRef dalam hubungan. Anda sekarang dapat membuat model referensi diri - kunci asing dan banyak hubungan. ForwardRef dapat digunakan dengan ke dan melalui Model.
  • Perkenalkan kemungkinan untuk melakukan dua sambungan relasional yang identik dalam satu pertanyaan untuk menangani hubungan yang kompleks, seperti:

    1
    2
    3
    4
    5
    6
    7
        B = X = Y
      //
     SEBUAH
      \
        C = X = Y < = sebelum Anda dapat menautkan dari X ke Y hanya sekali dalam satu pertanyaan
                     Kecuali dua hubungan yang berbeda digunakan
                     (Dua bidang relasi dengan nama berbeda)
    
  • Memperkenalkan metode paging yang memungkinkan batas / offset berdasarkan halaman dan ukuran halaman\ _. Tersedia untuk QuerySet dan QuerysetProxy.

lainnya

  • Refactoring dan optimasi kinerja dalam pertanyaan dan bergabung.
  • Tambahkan Python 3.9 ke pengaturan pengujian dan Pypi.
  • Perbarui Dokumentasi dan Dokumentasi API - >, yang merupakan perpecahan dari dokumen kueri.

0.8.0

istirahat

Orang tua dari anak dalam Breaking: hapus () hubungan kunci asing terbalik sekarang perlu melewati nama hubungan karena model yang sama dapat didaftarkan beberapa kali, dan ormar perlu mengetahui hubungan orang tua mana yang ingin Anda singkirkan. anak dari. * Istirahat: Secara default, gunakan pilih\ _ lated menerapkan batas dan offset hanya untuk tabel utama sebelum bergabung - > yang berarti bahwa tidak jumlah total baris terbatas, tetapi hanya jumlah model master (yang pertama dalam kueri, digunakan untuk membangunnya). Anda masih dapat menggunakan limit\ _ raw\ _ sql = True flag pada limit atau offset (atau keduanya) untuk membatasi semua baris dalam respon database Korupsi : Emitting first () sekarang akan mendapatkan baris pertama diurutkan berdasarkan asc kunci utama (jadi baris pertama dimasukkan (mungkin berbeda untuk kunci utama non-numerik - yaitu urutan alfabet string)) Korupsi* : Memancarkan mendapatkan () tanpa filter apa pun sekarang akan mengambil baris pertama yang diurutkan berdasarkan desc kunci utama (jadi itu harus menjadi baris terakhir yang dimasukkan (mungkin berbeda untuk kunci utama non-numerik - yaitu urutan alfabet string)) * Destruction (internal): Kolom sqlalchemy yang tersisa di Meta.columns tidak lagi terikat pada tabel, jadi Anda tidak dapat langsung mengambil kolom dari sana

fitur

  • Perkenalkan warisan. Saat ini ada dua jenis warisan yang dimungkinkan:
    • Mixins - jangan subclass ormar. Model, cukup definisikan bidang yang digunakan nanti pada model yang berbeda (misalnya dibuat\ _ tanggal dan diperbarui\ _ tanggal pada setiap submodel), hanya model sebenarnya yang membuat tabel, tetapi tambahkan bidang tersebut dalam campuran Warisan tabel beton* - berarti bahwa orang tua ditandai sebagai abstrak = Benar di kelas Meta, dan setiap anak memiliki mejanya sendiri dengan kolom dari orang tua dan kolom anaknya sendiri, agak mirip dengan Mixins, tetapi orang tuanya juga merupakan model (abstrak)
    • Untuk mempelajari lebih lanjut, lihat dokumentasi pada bagian Model - > Warisan.
  • QuerySet pertama () dapat digunakan dengan prefetch\ _ lated

perbaikan

  • Perbaiki bug kecil secara berurutan\ _ berdasarkan urutan model utama oleh
  • Perbaiki beberapa\ _ nama prefetch\ _ query terkait untuk model yang sama.
  • perbaikan menggunakan terkait\ _ nama yang sama pada model yang berbeda menyebabkan model terkait yang sama untuk menimpa satu sama lain, sekarang meningkatkan ModelDefinitionError dan Anda perlu mengubah nama.
  • Memperbaiki masalah di mana pesanan\ _ dengan mengesampingkan kondisi saat menerapkan beberapa sambungan ke tabel yang sama.

Dokumen

  • Memisahkan dan membersihkan dokumen:
    • Bagilah model menjadi bagian-bagian yang lebih kecil
    • Bagilah bagian hubungan menjadi subbagian
    • Bagilah bagian lapangan menjadi bagian-bagian kecil
  • Tambahkan bagian warisan model
  • Tambahkan dokumentasi API (beta)

0.7.5

  • Memperbaiki nama seri relasional yang salah di Banyak koneksi\ _ ke\ _ banyak (fix # 73)

0.7.4

  • Memungkinkan beberapa hubungan ke model / tabel terkait yang sama.
  • Memperbaiki seri level kesalahan yang digunakan di Banyak koneksi\ _ ke\ _ (Fix # 73)
  • Memperbaiki populasi hubungan yang salah untuk hubungan M2M ketika model yang sama juga memiliki hubungan FK.
  • Jika ada beberapa hubungan pada tabel yang sama pada model, tambahkan pemeriksaan untuk melihat apakah pengguna memberikan\ _ nama terkait.
  • Lebih bersemangat membersihkan model proxy lemah yang mati.

0.7.3

  • Memperbaiki masalah dengan mengambil model terkait menggunakan pengaturan pk UUDI, di mana pk UDI adalah string mentah (fix # 71)

0.7.2

  • fix untuk menimpa model terkait dengan hanya pk Model.update() with fields passed as parameters(fix # 70)

0.7.1

  • Memperbaiki model terkait menggunakan pk hanya dalam Model.save () (fix # 68)

0.7.0

  • Break: QuerySetBulk\ _ metode update sekarang melemparkan ModelPersistenceError pada lulus model yang belum disimpan bukannya QueryDefinitionError
  • Terobosan: Inisialisasi model dengan nama bidang yang tidak diketahui sekarang mengangkat ModelError, bukan KeyError
  • menambahkan sinyal dengan sinyal daftar dan dekorator yang telah ditentukan: posting\ _ hapus, posting\ _ simpan, posting\ _ perbarui, pra\ _ hapus, pra\ _ simpan, pra\ _ perbarui
  • Tambahkan py.typed dan modifikasi setup.py untuk mendukung mypy
  • optimasi kinerja
  • Perbarui dokumen

0.6.2

  • optimasi kinerja
  • Memperbaiki bug yang membutuhkan bidang pydantic\ _ only
  • menambahkan properti\ _ dekorator lapangan, mendaftarkan fungsi sebagai properti, yang akan dimasukkan dalam tanggapan Model.model\ _ dump () dan fastapi
  • Perbarui dokumen

0.6.1

  • Secara eksplisit mengatur Tidak ada untuk mengecualikan bidang nullable untuk menghindari pengaturan pydantic nilai default (fix # 60).

0.6.0

  • Breaking: Calling instance.load () ketika menghapus baris contoh dari database sekarang menimbulkan NoMatch bukan ValueError
  • Istirahat: Memanggil Tambahkan dan Hapus pada ReverseForeignHubungan utama sekarang memperbarui pengaturan database / menghapus submodel di kolom fk Terobosan* : ReverseForeignHubungan utama sekarang mengekspos QuerySetProxy API seperti ManyToBanyak hubungan
  • Rusak: Mempercepat model terkait dari ManyToMany menghapus daftar model terkait yang dimuat pada model induk: Contoh* : post.kategorories.first () akan menetapkan post.category ke daftar 1 model terkait - > model yang dikembalikan terlebih dahulu ()
    • Contoh 2: Jika sebuah postingan memiliki 4 kategori, maka len (post.category) = = 4 panggilan post.categories.limit(2).all()- > sekarang hanya memuat 2 proses anak assert len(post.categories) == 2
  • menambahkan dapatkan\ _ atau\ _ buat, perbarui\ _ atau\ _ buat, bidang, kecualikan\ _ bidang, pengecualian, prefetch\ _ lated, dan pesan\ _ by to QuerySetProxy, jadi sekarang Anda dapat menggunakan metode ini langsung dari hubungan
  • Perbarui dokumen

0.5.5

  • memperbaiki masalah autogenerasi alembik untuk memigrasikan kolom UUID. Seharusnya hanya menghasilkan CHAR sqlalchemy (32) atau CHAR (36)
  • Agar ini berfungsi, Anda harus mengatur pengguna\ _ modul\ _ awalan = 'sa'. (Harus sama dengan sqlalchemy\ _ modul\ _ opsi awalan (default adalah "sa."))

0.5.4

  • memungkinkan melewati format uuid\ _ (memungkinkan "heksadesimal" (default) atau "string") ke bidang UUID untuk mengubah format simpanannya. Secara default, bidang disimpan dalam format heksadesimal (dipangkas menjadi 32 karakter (tanpa tanda hubung)), tetapi Anda dapat melewati format = 'string' untuk menggunakan 36 (dengan tanda hubung) untuk menyesuaikan database yang ada atau perpustakaan lainnya.

    Contoh:

    • Nilai heksadesimal = c616ab438cce49dbbf4380d109251dce
    • Nilai string = c616ab43-8cce-49db-bf43-80d109251dce

0.5.3

  • Memperbaiki bug dalam metode Model.model\ _ dump () yang mengabaikan parameter pengecualian dan tidak menyertakan parameter kamus.

0.5.2

  • Menambahkan metode prefetch\ _ lated untuk memuat model berikutnya dalam pertanyaan terpisah.
  • Perbarui dokumen

0.5.1

  • Beralih ke aksi github alih-alih travis
  • Perbarui lencana dalam dokumen

0.5.0

  • Ditambahkan save state - > Anda dapat memeriksa apakah model telah disimpan menggunakan properti ModelInstant.
    • Simpan model setelah menyimpan / memperbarui / memuat / memperbarui metode penyisipan pada model Model* disimpan setelah metode create/get/first/all/get_or_create/update_or_create
    • Model disimpan ketika diteruskan ke massal\ _ update dan massal\ _ buat
    • Simpan model setelah menambahkan / menghapus Banyak objek terkait (simpan / hapus secara otomatis melalui contoh model)
    • Model tidak disimpan setelah mengubah bidang sendiri (termasuk pk sebagai alias Model.pk)
    • Model tidak disimpan setelah menambahkan / menghapus Objek terkait ForeignKey (kolom fk tidak disimpan)
    • menggunakan\ __init_\ _ tidak menyimpan model setelah instantiasi (tanpa menggunakan QuerySet.buat atau sebelum menelepon simpan)
  • menambahkan Model.upsert (**kwargs), simpan () jika pk tidak disetel, jika tidak perbarui (**kwargs)
  • Extra Model.save_related(follow=False) mengulangi semua objek terkait dalam semua hubungan dan memeriksa apakah mereka disimpan. Jika tidak, itu memanggil upsert () pada setiap objek.
  • Istirahat: Jika Anda menambahkan / menghapus model yang belum disimpan (pk is None) ke hubungan banyak-ke-banyak, tambahkan lemparan pengecualian
  • Memungkinkan melewati kamus dan koleksi ke bidang dan kecuali\ _ bidang
  • Secara otomatis menerjemahkan str dan daftar ke dalam kamus untuk bidang dan kecuali\ _ bidang
  • Istirahat: Melewati model bersarang ke ladang dan menggali\ _ bidang sekarang dengan nama kunci asing terkait, bukan nama model target
  • Optimasi kinerja - dalam modelproxy, newbasemodel - pengurangan permintaan >, beberapa properti di-cache pada model
  • Bersihkan kode relasional yang tidak digunakan
  • Tambahkan orjson ketergantungan kinerja opsional (sangat direkomendasikan)
  • Perbarui dokumen

0.4.4

  • Tambahkan kecuali\ _ field () metode untuk mengecualikan bidang dari SQL
  • Refactor pengaturan nama kolom (alias)
  • Perbaiki bagaimana kolom dengan alias diurutkan
  • Tes tambahan untuk bidang dan kecuali\ _ bidang
  • Perbarui dokumen

0.4.3

  • Berisi properti dalam model.model\ _ dump () dan model.model\ _ dump\ _ json ()

0.4.2

  • Ubah pembuatan model pydantic untuk memungkinkan kembalinya model terkait yang hanya diisi dengan pk

0.4.1

  • Tambahkan pesanan\ _ dengan metode ke set kueri untuk memungkinkan penyortiran
  • Perbarui dokumen

0.4.0

  • mengubah notasi dalam definisi model - > sekarang menggunakan nama = ormar. Field () bukan nama: ormar. Field ()
    • Harap dicatat bahwa notasi lama masih didukung, tetapi tidak digunakan lagi dan tidak bekerja dengan baik dengan catur statis seperti mypy dan plugin pydantic pycharm
  • Masukkan dokumen prompt dan uji
  • Anda juga tidak dapat menggunakan mypy untuk pengujian, Anda hanya dapat menggunakan paket ormar
  • Perbaiki konversi skala dan presisi menggunakan max\ _ digit dan desimal\ _ tempat bidang Desimal pidantik
  • Memperbarui Dokumentasi - Praktik Terbaik untuk Menambahkan Ketergantungan
  • Refactor metaclass dan model\ _ field untuk menggunakan petunjuk tipe dengan lebih baik
  • Tambahkan plugin mypy dan pydantic ke dokumentasi
  • Perluas dokumentasi tentang banyak-ke-banyak hubungan

0.3.11

  • Memperbaiki pengaturan server\ _ default sebagai nilai bidang default dalam python

0.3.10

  • Perbaiki pemeriksaan postgresql untuk menghindari pengecualian di mana pengemudi tidak dipasang saat menggunakan backends yang berbeda

0.3.9

  • Perbaiki generasi skema JSON dari # 19
  • Memperbaiki masalah dengan hubungan ManyToMany yang belum diinisialisasi dalam salinan fastapi ormar. Model
  • Perbarui dokumentasi tentang penggunaan FastAPI
  • Tambahkan tes untuk memverifikasi bahwa fastapi / docs dihasilkan dengan benar

0.3.8

  • Menambahkan kemungkinan untuk memberikan nama kolom database alternatif dengan parameter nama untuk semua bidang.
  • Memperbaiki bug yang menggunakan bidang () untuk memilih bidang ManyToMany yang relevan jika kosong.
  • Perbarui dokumen

0.3.7

  • Publikasikan dokumentasi dan perbarui file readme

0.3.6

  • Tambahkan bidang () metode untuk membatasi kolom yang dipilih dalam database - hanya kolom nullable yang dapat dikecualikan.
  • UniqueColumns dan daftar kendala ditambahkan ke elemen model untuk membangun kendala unik pada daftar kolom.
  • Menambahkan tipe bidang UUID berdasarkan tipe kolom Char (32).

0.3.5

  • Menambahkan pembaruan massal\ _ buat dan massal\ _ untuk operasi pada beberapa objek.

0.3.4

Tambahkan Metode Tingkat Set Kueri

  • menghapus
  • pembaruan
  • Memperoleh atau membuat
  • Perbarui atau buat

0.3.3

  • Tambahkan filter tambahan - awal dan akhir

0.3.2

  • Tambahkan parameter opsi ke semua bidang - batasi nilai yang diterima untuk yang disediakan

0.3.1

  • Menambahkan pengecualian untuk menyaring di mana tidak.
  • Menambahkan tes untuk MySQL dan Postgres, dan Postgres tetap.
  • Rafactor dan pembersihan.

0.3.0

  • Menambahkan ManyToBanyak bidang dan mendukung banyak-ke-banyak hubungan