Ausgabe erklärt .
0.20.1
» Wichtige Änderungen
- Bitte beachten Sie , dass dies die erste Version von Ormar ist , die keine Betaversion hat und Pydantic v2 unterstützt .https://collerek.github.io/ormar/0.20.0b1/migration/
🐛 Reparieren
- Problem behoben , bei dem dasselbe Zielmodell mit select \ _ lated und prefetch \ _ lated kombiniert wurde .
- Problem #812 im Zusammenhang mit dem Speichern von reinen pk-Modellen wurde behoben
- Es wurde ein Problem behoben , bei dem das Hinzufügen derselben Beziehung den relationalen Cache #1335 beschädigte .
» Charaktereigenschaften
- Hinzufügen des Fremdschlüsselindexes #1276 durch@cmflynn erlaubt
💬Weitere
- @Chaoyingz einige Dateien repariert , danke !
0.20.0
» Wichtige Änderungen
-
OMA Modell Ausstattung .
Jetzt benötigt jedes ormar-Modell einen ormar \ _ config-Parameter , der eine Instanz der OrmarConfig-Klasse ist , anstatt die Meta - Klasse zu definieren .
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
Import von Datenbanken Der Import von Ormar Import von Sqlalchemy Datenbank = Datenbank . Datenbank (" sqlite ://db . sqlite ") metadata = sqlalchemy . metadata () [ Bearbeiten | Quelltext bearbeiten ] Der Ormar < 0.20 Klasse Album (ormar . model) : Meta Klassen : Datengrundlage = Datenbank Metathek = Metathek Tabername = " Album " id: int = ormar. Integer (primary_key = true)(nicht bekannt) name: str = ormar. String (max_length = 100) Favoriten: bool = ormar. Boolean (default = False) @@@#0.20 von Klasse AlbumV20 (ormar. Modell): Die Abbildung zeigt die Konfidenzintervalle ( Datenbank = Datenbank, Metathek = Metathek, tabbename ="albums_v20" ) id: int = ormar. Integer (primary_key = true)(nicht bekannt) name: str = ormar. String (max_length = 100) Favoriten: bool = ormar. Boolean (default = False) -
OrmarConfig api/Parameterübersicht
ormar_config macht denselben Satz von Einstellungen verfügbar, den die Meta-Klasse bereitstellt, was bedeutet, dass Sie die Konfiguration mit einem der folgenden Parameter initialisieren können:
1 2 3 4 5 6 7 8 9 10
metadata: Optional [sqlalchemy. metadata][Bearbeiten | Quelltext bearbeiten] Datenbank: Optional [Datenbank.] engine: Optional [sqlalchemy. engine. engine. engine][Bearbeiten | Quelltext bearbeiten] tabellenname: Optional [str] order_by: Optional [Liste [str]](optional) [Bearbeiten | Quelltext bearbeiten] Zusammenfassung: Bool exclude_parent_fields: Optional [Liste [str]](optional)(optional)(optional)(optional) queryset_class: Typ [QuerySet](QuerySet) zusätzlich: Extra constraints: Optional [Liste [ColumnCollectionConstraint]][Bearbeiten | Quelltext bearbeiten] -
BaseMeta Äquivalente-Best Practices
Beachten Sie, dass zur Reduzierung der Codeduplizierung und zur Vereinfachung der Entwicklung es immer noch ratsam ist, eine Basiskonfiguration zu erstellen und eine Kopie jedes Modells bereitzustellen OrmarConfig bietet eine praktische Replikationsmethode.
Die copy-Methode akzeptiert dieselben Parameter wie Ormarinit Config, Sie können sie also bei Bedarf außer Kraft setzen, sie gibt jedoch standardmäßig bereits vorhandene Eigenschaften zurück, mit Ausnahme von tablename, order_by und Einschränkungen, die standardmäßig gelöscht werden.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
Importieren von Datenbanken Der Import von Ormar Import von Sqlalchemy Die Abbildung zeigt die Konfidenzintervalle für die Konfidenzintervalle: ( Datenbank = Datenbank. Datenbank ("sqlite://db. sqlite"), metadata = sqlalchemy. metadata ()[Bearbeiten | Quelltext bearbeiten] ) Klasse Album V20 (ormar. Modell): Die Datei Datei Datei Datei: Config_Config_Config ( tabbename ="albums_v20" ) id: int = ormar. Integer (primary_key = true)(nicht bekannt) name: str = ormar. String (max_length = 100) Klasse TrackV20 (ormar. Modell): Die Datei Datei Datei Datei: Config_Config_Config ( tabrename ="tracks_v20"(Übersicht) ) id: int = ormar. Integer (primary_key = true)(nicht bekannt) name: str = ormar. String (max_length = 100)[Bearbeiten | Quelltext bearbeiten] -
optionsfeldparameter werden nicht mehr unterstützt.
Vor Version 0.20 konnten Sie Optionsparameter an jedes vorhandene ormar-Feld senden, um akzeptable Werte einzuschränken Diese Funktion wurde entfernt, und Sie sollten das ormar. Enum-Feld verwenden, das für diesen Zweck entworfen wurde Wenn Sie den Datenbankfeldtyp beibehalten möchten (d. h. ein Integer-Feld), können Sie jederzeit einen benutzerdefinierten Validator schreiben.
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
Import von Datenbanken Der Import von Ormar Import von Sqlalchemy Datenbank = Datenbank. Datenbank ("sqlite://db. sqlite") metadata = sqlalchemy. metadata ()[Bearbeiten | Quelltext bearbeiten] Der Ormar <0.20 Klasse Künstler (ormar. model): Meta Klassen: Datengrundlage = Datenbank Metathek = Metathek id: int = ormar. Integer (primary_key = true)(nicht bekannt) name: str = ormar. String (max_length = 100)[Bearbeiten | Quelltext bearbeiten] String (default = False, max_length = 50, choices =["UK","US","Vietnam"]) @@@#0.20 von from enum import enum (aus Enum importieren) class country (str, Enum)(Frankreich): Vereinigtes Königreich ="UK" Vereinigte Staaten ="US" VETNAM = „ Vietnam " Farbe: "Colombia" Klasse ArtistV20 (ormar. Modell): Die Abbildung zeigt die Konfidenzintervalle ( Datenbank = Datenbank, Metathek = Metathek, tablename ="Künstler_V20" ) id: int = ormar. Integer (primary_key = true)(nicht bekannt) name: str = ormar. String (max_length = 100) Land: Land = ormar. Enum (enum_class = Land) -
pydantic_only Feldargumente werden nicht mehr unterstützt
Das Feld pydantic_only ist veraltet und wurde in v0.20 entfernt Ormar erlaubt die Definition von pydantischen Feldern wie ein normales pydantisches Modell.
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
Import von Datenbanken Der Import von Ormar Import von Sqlalchemy Datenbank = Datenbank. Datenbank ("sqlite://db. sqlite") metadata = sqlalchemy. metadata ()[Bearbeiten | Quelltext bearbeiten] Der Ormar <0.20 Klasse Dish (ormar. Modell): Meta Klasse: Datengrundlage = Datenbank Metathek = Metathek tablename ="Fehler" id: int = ormar. Integer (primary_key = true)(nicht bekannt) name: str = ormar. String (max_length = 100) String (max_length = 40, pydantic_only = true, default ="sam")(Siehe auch: max_length = 40, pydantic_only = True, default ="sam") @@@#0.20 von Klasse DishV20 (ormar. Modell): Die Abbildung zeigt die Konfidenzintervalle ( Datenbank = Datenbank, Metathek = Metathek, tablename ="dishes_v20"(Fehler) ) id: int = ormar. Integer (primary_key = true)(nicht bekannt) name: str = ormar. String (max_length = 100)[Bearbeiten | Quelltext bearbeiten] <p> Dies ist ein normales pydantisches Feld -
property_field Dekoratoren werden nicht mehr unterstützt
Mit der property_field-Decorator-Methode, die verwendet wird, um berechnete Felder in der dictionary/serialisierten JSON-Darstellung eines Modells zu übergeben, wurde diese Möglichkeit in der pydantic 2.X Version eingeführt, so dass Sie jetzt auf die native Version von pydantic wechseln sollten.
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
Importieren von Datenbanken Der Import von Ormar Import von Sqlalchemy Import von Pydantik Datenbank = Datenbank . Datenbank (" sqlite ://db . sqlite ") metadata = sqlalchemy . metadata () [ Bearbeiten | Quelltext bearbeiten ] Der Ormar < 0.20 Klasse Mitarbeiter (Modell) : Meta Klassen : Datengrundlage = Datenbank Metathek = Metathek id : int = ormar . Integer (primary _ key = true) (nicht bekannt) first _ name : str = ormar . String (max _ length = 100) [ string = ormar . string (max _ length = 100) ] (max _ length = 100) [ string = 100 ] (max _ length = 100) last _ name : str = ormar . String (max _ length = 100) string = ormar . string (max _ length = 100) @ormar.propertyDas Feld () def full _ name (self) - > str : Zurück zu "{self.first_name}" {self.last_name}" aus @@@#0.20 von Klasse EmployeeV20 (ormar . Model) : Die Abbildung zeigt die Konfidenzintervalle ( Datenbank = Datenbank , Metathek = Metathek , ) id : int = ormar . Integer (primary _ key = true) (nicht bekannt) first _ name : str = ormar . String (max _ length = 100) [ string = ormar . string (max _ length = 100) ] (max _ length = 100) [ string = 100 ] (max _ length = 100) last _ name : str = ormar . String (max _ length = 100) string = ormar . string (max _ length = 100) Die Funktion @ pydantic. computed_field () def full_name (self)-> str: Zurück zu:{self.first_name} {self.last_name}"aus. -
Die vergebene Methode
Alle unten aufgeführten Methoden sind veraltet und werden in Ormar Version 0.30 entfernt.
-
dict () wird zum Modell_dump ()
Import von Datenbanken Der Import von Ormar Import von Sqlalchemy
Datenbank = Datenbank. Datenbank ("sqlite://db. sqlite") metadata = sqlalchemy. metadata ()[Bearbeiten | Quelltext bearbeiten]
Klasse Album (ormar. model): Die Abbildung zeigt die Konfidenzintervalle ( Datenbank = Datenbank, Metathek = Metathek, Tabername ="Album" )
1 2 3
id: int = ormar. Integer (primary_key = true)(nicht bekannt) name: str = ormar. String (max_length = 100)[Bearbeiten | Quelltext bearbeiten] Favoriten: bool = ormar. Boolean (default = False)Album vorhören Dark Side Of The Moon
Der Ormar <0.20 Album_Dict = Album. Dict ()(Übersetzung)
@@@#0.20 von new_album_dict = album. model_dump ()[Bearbeiten | Quelltext bearbeiten]
Bitte beachten Sie, dass die Parameter unverändert bleiben, d. h. ein-, ausschließen usw.
-
json () wird zum 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
Importieren von Datenbanken Der Import von Ormar Import von Sqlalchemy Datenbank = Datenbank. Datenbank ("sqlite://db. sqlite") metadata = sqlalchemy. metadata ()[Bearbeiten | Quelltext bearbeiten] Klasse Album (ormar. model): Die Abbildung zeigt die Konfidenzintervalle ( Datenbank = Datenbank, Metathek = Metathek, Tabername ="Album" ) id: int = ormar. Integer (primary_key = true)(nicht bekannt) name: str = ormar. String (max_length = 100) Favoriten: bool = ormar. Boolean (default = False) Album vorhören Dark Side Of The Moon Der Ormar <0,20 JSON = ALBUM. JSON ()(auf Deutsch) @@@#0.20 von new_album_dict = album. model_dump_json ()[Bearbeiten | Quelltext bearbeiten]Bitte beachten Sie, dass die Parameter unverändert bleiben, d. h. ein-, ausschließen usw.
-
construct () wird zu model_construct ()
Import von Datenbanken Der Import von Ormar Import von Sqlalchemy
Datenbank = Datenbank. Datenbank ("sqlite://db. sqlite") metadata = sqlalchemy . metadata () [ Bearbeiten | Quelltext bearbeiten ]
Klasse Album (ormar . model) : Die Abbildung zeigt die Konfidenzintervalle ( Datenbank = Datenbank , Metathek = Metathek , Tabername = " Album " )
1 2 3
id : int = ormar . Integer (primary _ key = true) (nicht bekannt) name : str = ormar . String (max _ length = 100) [ Bearbeiten | Quelltext bearbeiten ] Favoriten : bool = ormar . Boolean (default = False)paramisch = { Inhaltsangabe zu " Dark Side Of The Moon " " Favorit " : Richtig , } Der Ormar < 0,20 Album = Album . construct (* * Params) (Übersetzung)
@@@#0.20 von Beispiel : Album = Album . model _ construct (* * params)
Um mehr über Konstrukte zu erfahren , lesen Sie die pydantische Dokumentation .
-
0.12.2
# # Eigenheiten
- FastAPI-Unterstützung auf die neueste Version aktualisiert (0.97.0) #1110
- Unterstützung und Tests für Python 3.11 hinzugefügt #1110
0.12.1
# # Eigenheiten
- Die Leistung beim Laden von Modellen wurde durch rekursives Laden und Caching der Modelle und verwandter Modelle erheblich verbessert (@erichaydel - danke !) #853 .
💬Die innere Struktur
- Benchmarks zum Vergleich der Performance-Effekte der implementierten Trendänderungen (wieder , von@erichaydel - danke !) #853
0.12.0
#
- Queryset . bulk \ _ create löst jetzt einen ModelListEmptyError auf einer leeren Modellliste aus (von@ponytailer - danke !) #853 .
# # Eigenheiten
- Model . upsert () verarbeitet jetzt ein Flag \ _ force _save __ : bool , das es ermöglicht , Einfügemodelle zu aktualisieren , unabhängig davon , ob sie einen Primärschlüssel festgelegt haben oder nicht Beachten Sie , dass das Festlegen dieses Flags zu zwei Abfragen für jedes aktualisierte eingefügte Modell führt - > get überprüft , ob das Modell vorhanden ist , und entsprechende Aktualisierungen/Einfügungen zu einem späteren Zeitpunkt .
🐛Reparieren
- Eine leere Beziehung , die die Konstruktionsmethode beschädigt hat , wurde behoben (von@Abdeldjalil-H - danke !) #870
- Problem im Zusammenhang mit dem Speichern behoben , bei dem Modelle mit festgelegten Pks (einschließlich uuid) nicht gespeichert werden #885
- Beheben Sie Fehlerbeziehungen nach Ausschlussreihenfolge Ausschlüsse #779
- Fix property \ _ fields nicht ordnungsgemäß geerbt Problem #774
0.11.3
# # Eigenheiten
- protokolliert onupdate - und ondelete-Referenzaktionen in ForeignKey und stellt eine ReferentialAction-Enumeration zur Verfügung , um das Verhalten der Beziehung anzugeben (von@SepehrBazyar - danke !) #724
- Hinzufügen von CheckColumn zu den Einschränkungen , die in Model Meta unterstützt werden (von@SepehrBazyar - danke !) #729
🐛Reparieren
- Fix , um Abfrageergebnisse auf 0 zu begrenzen , die eine leere Liste zurückgeben sollten (von@SepehrBazyar - danke !) #766
💬Weitere
- Hinzufügen des dunklen Modus zum Dokument (von@SepehrBazyar - danke !) #717
- Aiomysql-Abhängigkeiten aktualisiert #778
0.11.2
🐛Reparieren
- Reparieren von Datenbanktreibern ist erforderlich und sollte optional sein #713
- Problem mit booleschen Feldern in eingeschränkten Abfragen ohne limit \ _ raw \ _ sql-Flag in Postgres behoben #704
- Fehler #699 in der OpenAPI behoben , der dazu führte , dass der enum \ _ class - Überlauf auf das Schema den Fehler #699 in der OpenAPI verursachte
0.11.1
🐛Reparieren
- Das in pydantic 1.9 eingeführte Problem mit der tiefen Replikation #685 wurde behoben .
0.11.0
#
- Ende der Unterstützung für Python 3.6
- Queryset . get \ _ or \ _ create gibt jetzt ein Tupel zurück , das das Modell und Boolesche Werte enthält , die anzeigen , ob das Modell erstellt wurde (von@MojixCoder - danke !) #554
- Queryset . count () berechnet nun standardmäßig die Anzahl der verschiedenen Zeilen im übergeordneten Modell und kann alle Zeilen berechnen , indem unique = False gesetzt wird (von@erichaydel - danke) #588
# # Eigenheiten
- Unterstützung für Python 3.10 hinzugefügt .
🐛Reparieren
- Behebt inkonsistentes JSON-Feldverhalten in save und bulk \ _ create #584
- Behebung des größten Rekursionsfehlers #580
0.10.25
# # Eigenheiten
- fügt die Option queryset \ _ class zu Model . Meta hinzu , wodurch es einfach ist , QuerySet durch Ihr Modell zu ersetzen (von@ponytailer - danke !) #538
- ermöglicht es , zusätzliche kwargs an IndexColumns zu übergeben , die Indexspalten an sqlalchemy Index übergeben (von@zevisert - danke) #575
🐛Reparieren
- Reparieren Sie die leere Einstellung des JSON-Felds # 529
- behebt ein Problem , bei dem Bytes/str bei Stapeloperationen nicht mit Orjson übereinstimmt (von@ponytailer - danke !) #538
0.10.24
# # Eigenheiten
- Hinzufügen eines post \ _ bulk \ _ update-Signals (von@ponytailer - danke !) #524
🐛Reparieren
- Unterstützung für pydantic = = 1.9.0#502 wurde behoben .
- Beheben Sie Zeitzonenprobleme für Datumszeit #504
- entfernt die Textbindung aus der Abfragegenerierung , um das postgres-Array zu entsperren #/tophat/ormar-postgres - extensions/9
- Fix Bulk-Update für JSON-Feld #519
💬Weitere
- verbessert die Leistung von bulk _ create , indem es die Datenbankexecute _ _ many Sub-Implementation umgeht (@Mng-dev - ai Danke !) #520
- Die benötigte Datenbankversion für Schockminuten ist > = 5.4 .
0.10.23
# # Eigenheiten
- Funktion zum Übergeben von Kommentaren an sqlalchemy beim Erstellen einer Spalte hinzugefügt #485
🐛Reparieren
- Das Feld LargeBinary kann leer sein #409
- macht ormar . Model verfügbar #413
- Damit first () und get () die vom Benutzer festgelegte Reihenfolge des Mastermodells ohne Parameter respektieren , wird auf die Primärschlüssel (asc bzw . desc) #453 zurückgegriffen .
- Fix für einen falschen Verweis auf die Nicht-Alias - Join-Klausel in Postgress #455
0.10.22
🐛Reparieren
- Der Validator wird nicht vererbt , wenn das übergeordnete ormar-Modell festgelegt wird Hotfix #365
0.10.21
🐛Reparieren
- fügt eine ormar-Implementierung der Konstruktorklassenmethode hinzu , mit der Modellinstanzen erstellt werden können , ohne die Eingabe zu validieren , um den gesamten Prozess zu beschleunigen , wenn Ihre Daten bereits verifiziert sind .
- behebt ein Problem , bei dem der Feldvalidator vom Ormar-Modell „ erbt " , wenn ein neu erstelltes Pydanic-Modell mit get_pydantic#365 erstellt wird .
0.10.20
# # Eigenheiten
- fügt einen zusätzlichen Parameter zu Model . Meta hinzu , der Extra . ignore und Extra . forbid (Standard) akzeptiert und die an das ormar-Modell übergebenen zusätzlichen Felder ignoriert oder bei Auftreten einer Ausnahme eine Ausnahme #358 auslöst .
🐛Reparieren
- Wenn das Feld leer sein kann und die Optionen festgelegt sind , ist " Keine " #354 nicht erlaubt .
- Setzen Sie Primary \ _ key unabhängig von Auto-Inkrement und expliziter Nulleinstellung immer auf Nicht leer , um Migrationsprobleme zu vermeiden #348
0.10.19
# # Eigenheiten
- Unterstützung für mehrspaltige , nicht eindeutige IndexColumns in Meta.constraints#307 hinzugefügt
- Das Attribut sql_nullable wurde hinzugefügt, um die unterschiedliche Nulleinstellung #308 für das pydantische Modell und die zugrunde liegende SQL-Spalte zu ermöglichen.
🐛Reparieren
- Aktivieren des Diagrammcaches zur Leistungssteigerung #337
- Klarstellung und Korrektur von Dokument #339 , das ein leeres Feld sein kann
💬Weitere
- Führen Sie ein Upgrade der unterstützten Datenbankversion auf < = 5.2 durch .
0.10.18
🐛Reparieren
- Fix Feldreihenfolge im pydantischen Modell #328
- Reparieren Datenbank 0.5.0 Unterstützung #142
0.10.17
# # Eigenheiten
- Der Standard-Pydantic - Typ #312 , der das Überschreiben von Modellfeldern erlaubt
- Fügt Unterstützung für sqlalchemy > = 1.4 hinzu (erfordert Datenbank > = 0.5.0) #142
0.10.16
# # Eigenheiten
- ermöglicht die Weitergabe Ihrer eigenen Pydantik-Konfiguration an ormar . Model , die von@naturalethic mit der Standardkonfiguration kombiniert wird (danke !) #285
- Hinzufügen des SmallInteger-Feldtyps durch@ProgrammerPlus1998 (danke !) #297
🐛Reparieren
- Openapi-Modus erzeugen wurde behoben , indem veraltete pydantische Feldparameter entfernt wurden , die direkt in Modus #291 veröffentlicht wurden .
- Beheben Sie unnötige Warnungen , die automatisch durch das Modell generiert wurden #295
0.10.15
🐛Reparieren
- Ein Problem mit verschachtelten Modellen zum Generieren eines pydantischen Modellbaums wurde behoben (von@pawamoy - danke !) #278
- Fix für fehlende f-Zeichenfolge #274 in Warnungen über fehlende Primärschlüsselfelder
- Es wurde ein Problem behoben , bei dem externe Schlüssel als Relationen übergeben wurden (zusätzlicher Schutz , in der neuesten Version behoben) #270
0.10.14
# # Eigenheiten
- ermöglicht die Weitergabe des Parameters timezone : bool = False an die DateTime - und Time-Felder #264 der Zeitzonen-fähigen Datenbankspalten
- ermöglicht das Übergeben von Datums - , Datums - und Uhrzeitfilterung in DateTime - , Time - und Date-Feldern , um das Filtern nach Datumszeit zu ermöglichen , anstatt den Wert in die Zeichenfolge #79 zu konvertieren
🐛Reparieren
- Abhängigkeiten von Psycopg2 auf Psycopg2 - binary behoben #255
0.10.13
# # Eigenheiten
-
ermöglicht die Weitergabe eines Feldzugriffs im Python-Stil select_ related#225 in select \ _ lated und prefetch \ _ lated .
-
vorher :
Await istPost.objects.select_ related ([ " Autor " , " Kategorien " ]) . get () await Author . objects . prefetch _ related (" posts _ _ categories ") . get ()
-
Jetzt ebenfalls :
Await istPost.objects.selectim Zusammenhang [ ]Post.authorVeröffentlicht in Kategorien ] . get ( await Author . objects . prefetch _ related (Author . posts . categories) . get () (Author . posts . categories . categories) (Author . objects . prefetch _ related (Author . posts . categories . categories) . get ())
-
🐛Reparieren
- Beheben Sie das Überschreiben des Standardwertes für ererbte Primärschlüssel #253
0.10.12
🐛Reparieren
- Fix : Die QuerySet . create-Methode verwendet init nicht , wenn sie eine Anpassung bereitstellt
- Fix ForwardRefManyToMany Beziehung gesetzt falsch pydantic Typ #250
0.10.11
# # Eigenheiten
- fügt QuerySet und QuerysetProxy Werte und values \ _ list hinzu und ermöglicht die Rückgabe der Rohdaten aus der Abfrage #223 .
- Erlaubt die Rückgabe von Tupellisten oder Wörterbuchlisten aus einer Abfrage
- Das Parsen von Daten in ein ormar-Modell wird übersprungen und damit auch die Validierung wird übersprungen .
- Ermöglicht den Ausschluss von Modellen zwischen Beziehungsketten , sodass Sie nur die erforderlichen Spalten extrahieren können
- Wenn Sie nur eine Spalte extrahieren , können Sie mit values \ _ list das Ergebnis abkürzen .
🐛Reparieren
- Es wurde ein Problem mit ForwardRef #226 behoben , das die automatische Erstellung von m2m-relationalen Modellen ermöglichte .
0.10.10
# # Eigenheiten
- fügt die get _ pydantic-Option hinzu , mit der Sie automatisch entsprechende pydantische Modellbäume aus ormar . Model generieren können , die in Anfragen und Antworten verwendet werden können , um Felder auszuschließen , die Sie nicht in Ihre Daten aufnehmen möchten .
- fügt den except \ _ parent \ _ fields Parameter zum Modell Meta hinzu , mit dem Sie Felder aus dem übergeordneten Modell während der Vererbung ausschließen können Beachten Sie , dass es am besten funktioniert , Modelle und Mixins zu kombinieren , aber wenn Sie viele ähnliche Modelle mit nur einem anderen haben , kann dies ein nützliches Werkzeug sein .
🐛Reparieren
- Ein leerer Filter mit Paginierung und Beziehungen wurde behoben (von@erichaydel) #214
- Beheben Sie ein Unterobjekt , das nicht vor #216 gespeichert wurde , nicht auf der gegenüberliegenden Seite der Beziehung gespeichert wird
💬Weitere
- Erweitern Sie den fastapi-Abschnitt des Dokuments , um Beispiele für die Verwendung von ormar in Anfragen und Antworten von fastapi zu zeigen .
- Verbessert die Dokumentation zu Standardwerten , ForeignKey . add usw .
0.10.9
# # Wichtige Sicherheitsüberprüfung
- Pydantic-Pins wurden aktualisiert , um die Sicherheitslücke CVE - 2021 - 29510 zu schließen
Wir empfehlen die Aktualisierung auf die gepatchte Version von pydantic In 0.10.9 wurden Schwachstellen in festen Abhängigkeiten behoben .
🐛Reparieren
- OpenAPI-Architektur von LargeBinary wurde korrigiert #204
0.10.8
🐛Reparieren
- Repariert den Standardwert #202 für das Auffüllen im pk \ _ only-Untermodell
- Verwenden Sie base64str , um mypy #199 des LargeBinary-Felds zu reparieren
- OpenAPI-Architekturformat #199 für das LargeBinary-Feld mit Base64str behoben
- OpenAPI-Select - Codierung für das LargeBinary-Feld mit Base64str wird repariert
0.10.7
# # Eigenheiten
- fügt die
exclude_primary_keys: bool = False-Markierung als dict () - Methode hinzu , die es ermöglicht , alle Primärschlüsselspalten aus Kapitel 164 des Ergebniswörterbuchs auszuschließen . - fügt einen Flag für
exclude_through_models: bool = Falsedict () hinzu , der es ermöglicht , alle Modelle von den ManyToMany-Beziehungen auszuschließen - fügt
represent_as_base64_str: bool = Falsehinzu , um die Konvertierung eines Bytes von einem LargeBinary-Feld in ein Argument für eine base64 - kodierte Zeichenfolge zu ermöglichen , die beim Zugriff auf eine Eigenschaft in dict () zurückgegeben wird und bei der Einrichtung in Byte-Daten aus der Datenbank umgewandelt wird Kapitel 187 Bytes gespeichert . - PK Name hinzufügen .Model.pkZugriff auf Felder in Filtern und in der Order by-Klausel (Python-Stil)
🐛Reparieren
- Entfernen Sie die Standardoption None für max \ _ length für das LargeBinary-Feld #186
- Löschen Sie die Standardoption None für das String Feld max _ length
💬Weitere
- Anleitungen und Beispiele für den dict () - Parameter in der Dokumentation
- Refactoring des Haupteigenzugriffs/der Einstellung von Attributen in magischen Methoden in Deskriptoren - > signifikante Leistungsverbesserungen
0.10.6
# # Eigenheiten
-
LargeBinary (max \ _ length) Feld Typ #166 hinzufügen .
-
fügt Unterstützung für normale pydantische Felder (einschließlich Modelle) hinzu , im Gegensatz zur pydantic \ _ only-Eigenschaft , die jetzt mit #160 veraltet ist und wie im pydantischen Modell neben dem ormar-Feld normal deklariert werden sollte , beachten Sie (natürlich) , dass ormar den Wert dieses Felds nicht in der Datenbank speichert und lädt , was bedeutet , dass eines der folgenden wahr sein muss :
- Das im ormar-Modell deklarierte pydantische Feld muss optional sein (Vorgabe ist None) .
- Die pydantische Spalte muss einen Standardwert haben .
- Das Feld pydantic hat einen default _ factory Funktionssatz .
- ormar . Model mit einem pydantischen Feld muss \ _ _init _\ _ () überschreiben und dort einen Wert bereitstellen
Wenn ormar (oder vielmehr pydantic) oben nicht während des Ladens der Daten aus der Datenbank fehlschlägt und der erforderliche Wert für das deklarierte pydantische Feld fehlt .
-
Ormar bietet nun interessante Beispiele im openapi-Modus , einschließlich verschachtelter Modelle , die mit den gleichen Algorithmen wie dict () und select/load \ _ all durchlaufen werden , ohne dass Sie sich die Beispiele ansehen müssen , die auch in Kapitel 157 von fastapi enthalten sind .
🐛Reparieren
- Standardmäßig validiert pydantic keine Felder während der Zuweisung , was für ORM nicht ideal ist , jetzt werden alle ormar . Models während der Zuweisung überprüft (z . B . model . column = ' value ') .
💬Weitere
- Verbindung zur Datenbank in readme # 180 in QuickStart hinzufügen Das OpenAPI-Schema* enthält nicht mehr die Dokumentzeichenfolge ormar . Model als Beschreibung , sondern nur noch den Modellnamen , wenn Sie keine eigene Dokumentzeichenfolge angeben .
- Einige Performance-Verbesserungen .
0.10.5
🐛Reparieren
- Fehler #73 in Fastapi-Vagina beheben
- entfernt unnötige Optional#174 aus QuerySet . all () - und Querysetproxy . all () - Rückgabewerten in List \ [ Optional \ [ T \ ] \ ]
- Run-Test - Coverage wird nur intern auf PRS veröffentlicht und nicht während des Github-Betriebs .
0.10.4
# # Eigenheiten
- Hinzufügen von Python-Stil
filterundorder_byVerwenden Sie den Feldzugriff anstelle von dunder-getrennten Zeichenfolgen Kapitel 51.- Zugriff auf Felder über Eigenschaftenzugriff (Punktzeichenketten) kann zum Konstruieren von FilterGroups (ormar . and _und ormar . or _) verwendet werden
Der* -Feldzugriff überschreibt eine Reihe von Python-Operatoren und bietet eine Reihe von Funktionen , die die gleiche Funktionalität wie die von dunder getrennten Parameternamen in **kwargs ermöglichen , was bedeutet , dass Sie jetzt mehr Optionen haben , um aus dem Modell Album im Beispiel-Track - Modell abzufragen :
- Exakt - Passt genau auf den Wert , sql Spalte =
- alt : album \ _ _name _\ _ exact ='Malibu '
- NEU : Kann auch geschrieben werdenTrack.album.name= > Malibu auf
- iexact - findet SQL-Spalten genau =
(Groß - und Kleinschreibung wird nicht berücksichtigt) - alt : Album \ _ _name _\ _ iexact ='Malibu ' für*
- NEU : Kann auch geschrieben werden
Track.album.name.iexact('malibu')
- SQL-Spalte Like ' % enthalten
%' - < alt > : album \ _ _name _\ _ contains ='Mal '
- Neu : Man kann auch schreiben :Track.album.name% „ Malisch "
- Neu : Kann auch geschrieben werden
Track.album.name.contains('Mal')
- icontains - sql-Spalte LIKE ' %
%'(Groß -/Kleinschreibung wird nicht berücksichtigt) - Das alte Album:_Vorname_Icontains ='mal 'ist
- Neu : Kann auch geschrieben werden .
Track.album.name.icontains('mal')
- innerhalb von - sql
column IN (<VALUE1>, <VALUE2>, ...)- Das Alte :
album__name__in=['Malibu', 'Barclay'] - Neu : Kann auch geschrieben werden
Track.album.name << ['Malibu', 'Barclay'] - NEU : Kann auch geschrieben werden
Track.album.name.in_(['Malibu', 'Barclay'])
- Das Alte :
- isnull - SQL-Spalte IS NULL (und SQL-Spalte IS NICHT NULL)
- Das alte Album-Vorname__isnull = true (kein Album)_Vorname__isnull = False (falsch)
- Neu : Man könnte auch schreiben :Track.album.name> > Keine
- NEU : Kann auch als Track . album . name . isnull (True) geschrieben werden .
- Man kann auch nicht NULL schreiben .
Track.album.name.isnull(False) - Neu : not null kann auch als~(Track.album.name > > None) geschrieben werden .
- Man kann auch nicht NULL schreiben .
~(Track.album.name.isnull(True))
- gt - sql-Spalte >
(größer als) - Beispiel : position _ \ _ gt = 3
- Neu : Man kann auch schreiben :Track.album.name> 3 und
- gte - sql-Spalte > =
(größer oder gleich) - Beispiel : position _ \ _ gte = 3
- Neu : Man kann auch schreiben :Track.album.name> = 3 oder
- lt - sql Spalten <
(unten) - Beispiel : position _ _ lt = 3
- Neu : Man kann auch schreiben :Track.album.name< drei
- lte - sql-Spalte < =
(weniger als gleich) - Beispiel : position _ \ _ lte = 3
- Neu : Man könnte auch schreiben :Track.album.name< = drei
- startswith - sql-Spalte LIKE '
% ' (genaue Startübereinstimmung) - : alte Version von_name _\ _ startswith ='Mal '
- Neu : Kann auch geschrieben werden .
Track.album.name.startswith('Mal')
- istartswith - sql-Spalte LIKE '
% ' (Groß -/Kleinschreibung wird nicht berücksichtigt) - Das Alte :
album__name__istartswith='mal' - Neu : Kann auch geschrieben werden
Track.album.name.istartswith('mal')
- Das Alte :
- endswith-sql Spalte Like ' %
(Ende der Übereinstimmung) - Das alte Album-_Vorname_\\endswith ='ibu '(mit dt.
- Neu : Kann auch geschrieben werden
Track.album.name.endswith('ibu')
- iendswith - sql-Spalte LIKE ' %
' (Groß - und Kleinschreibung wird nicht berücksichtigt) - Das alte Album-_Vorname_Zitat von » ibu «
- Neu : Kann auch geschrieben werden .
Track.album.name.iendswith('IBU')
- Exakt - Passt genau auf den Wert , sql Spalte =
- Zugriff auf Felder über Eigenschaftenzugriff (Punktzeichenketten) kann zum Konstruieren von FilterGroups (ormar . and _und ormar . or _) verwendet werden
Der* -Feldzugriff überschreibt eine Reihe von Python-Operatoren und bietet eine Reihe von Funktionen , die die gleiche Funktionalität wie die von dunder getrennten Parameternamen in **kwargs ermöglichen , was bedeutet , dass Sie jetzt mehr Optionen haben , um aus dem Modell Album im Beispiel-Track - Modell abzufragen :
- Sie können FilterGroups nicht nur in filter () und except () verfügbar machen , sondern auch in :
- erhalten ()
- Erhalten oder nicht ()
- Kaufen oder Erstellen ()
- Das erste (?)
- Das ganze (?)
- Streichung ()
- durch Filtergruppen (ormar. and) Ormar oder so.(Sie können es jetzt verwenden:
- & - verschachtelt als and \ _ anstelle der nächsten Ebene
- | - Als " or \ _ " anstelle der nächsten verschachtelten Ebene
- ~- als eine Gruppe von Filter-Negation
-
Um mehrere Filtergruppen in einer Gruppe von Kriterien zu kombinieren , verwenden Sie & (sql AND) und| (sql) oder
1 2 3 4 5 6 7 8 9 10 11
Die folgenden Fragen sind gleichwertig : Mit sql : (product.name= ' Test ' und Produkt . rating > = 3.0) Ormar Option 1 - OLD eine Product . objects . filter (name ='Test', rating _ _ gte = 3.0) . get () ist ein Ormar OPTION 2 - OLD ONE (Übersicht) Produkt . objects . filter (ormar . and _ (name ='Test', rating _ _ gte = 3.0)) . get () () () ist ein Ormar Option 3 - Neuer Zugang (Field Access) Product . objects . filter ((Produkt.name = = ' Test') & (Produkt.rating > = 3.0)) . get () -
Gleiches gilt für verschachtelte komplexe Filter .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
Die folgenden Fragen sind gleichwertig : Mit sql : (product.name= ' Test ' und Produkt . rating > = 3.0) # OR (categories.name IN ('Toys', ' Books')) (für alle Kategorien) Ormar Option 1 - OLD eine FilternBeliebige Entfernung ab Werk (OV) oder ( ormar . and _ (name ='Test', rating _ _ gte = 3.0) , categories _ _ name _ _ in = „ Toys " , „ Books " ]) und Get () Ormar OPTION 2 - NEW (zusätzlich benötigt oder mit `|`) FilternBeliebige Entfernung ab Werk : Filter ( ormar . and _ (name ='Test', rating _ _ gte = 3.0) (ormar . und _ (name ='Test', rating _ _ gte = 3.0)| ormar . and _ (categories _ _ name _ _ in = VARTHINIA ' Toys', ' Books']) [ Bearbeiten | Quelltext bearbeiten ] und Get () Ormar Option 3 - Neuer Zugang (Field Access) FilternBeliebige Entfernung ab Werk : Filter ( (Produktname = ' Test') und (Produktrating > = 3.0)| (Product.categories.name< < VARCHITÄT ' Toys ' und ' Books']) und Get () -
Sie können jetzt auch den Feldzugriff verwenden , um OrderActions an order \ _ by () zu übergeben
- Aufsteigend angeordnet :
- Das Alte :
Product.objects.order_by("name").all() - Das Neue :
Product.objects.order_by(Product.name.asc()).all()
- Das Alte :
- Reihenfolge reduziert :
- Das Alte :
Product.objects.order_by("-name").all() - Das neue :
Product.objects.order_by(Product.name.desc()).all()
- Das Alte :
- Natürlich können Sie auch verschiedene Modelle mit vielen order \ _ by kombinieren :
Product.objects.order_by([Product.category.name.asc(), Product.name.desc()]).all()
- Aufsteigend angeordnet :
🐛 Reparieren
- ist nicht wirklich ein Fehler , sondern inkonsistent bietet Filter mit verschachtelten Modellen , dh album \ _ _category _\ _ name = ' AA ' überprüft , ob Album - und Kategoriemodelle in select _lated () enthalten sind , und wenn nicht , werden sie dort automatisch hinzugefügt . Die gleiche Funktionalität funktioniert jetzt nicht mit FilterGroups (and _und or \ _) , sie funktioniert jetzt (auch für Python-Stilfilter , die FilterGroups zurückgeben) .
0.10.3
» Charaktereigenschaften
-
foreignKey und ManyToMany unterstützen jetzt skip \ _ reverse : bool = False Flag #118 Wenn Sie das skip \ _ reverse-Flag intern gesetzt haben , ist das Feld immer noch am anderen Ende der Beziehung registriert , so dass Sie :
- Nach relevanten Modellfeldern im umgekehrten Modell filtern
- order \ _ by Das verwandte Modellfeld im umgekehrten Modell
Aber Sie können nicht :
- Verwenden von related \ _ name zum Zugreifen auf relevante Felder aus dem umgekehrten Modell
- Selbst wenn Sie die Korrelation von der Kehrseite des Modells auswählen , wird das zurückgegebene Modell nicht in der Rückinstanz aufgefüllt (die Verbindung wird nicht blockiert , so dass Sie immer noch filtern und bestellen \ _ by können)
- Die Beziehung wird nicht mit dict () und json () aufgefüllt .
- kann verschachtelte verwandte Objekte nicht übergeben , wenn sie von dict () oder json () (auch durch fastapi) aufgefüllt werden , was abhängig von den zusätzlichen Einstellungen in der pydantischen Konfiguration ignoriert oder einen Fehler auslöst .
-
Model.save\ _ lated () kann nun den gesamten Baum auf einmal speichern # 148 bedeutet :
-
Es weiß , ob Sie zuerst das Hauptmodell oder das verwandte Modell speichern sollten , um die Beziehungen zu erhalten .
-
Das Hauptmodell wird beibehalten, wenn
- nicht bewahrt werden,
- Kein PK-Wert
- oder save_all = true, wenn die Option
In diesen Fällen müssen Sie das Speichern nicht in zwei Aufrufe aufteilen (save () und save_lated ()).
-
Es unterstützt auch viele Beziehungen.
-
Es unterstützt auch optionale Through Modellwerte für m2m-Beziehungen.
-
Hinzufügen der Möglichkeit zur Anpassung über den Namen des Feld Modell Relationship.
-
Standardmäßig wird der relationale Name des Modells standardmäßig in Kleinbuchstaben für den zugehörigen Modellnamen festgelegt, so dass in diesem Beispiel:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
...#Kursentscheidung getroffen Klasse Schüler (ormar. Meta Klassen: Datengrundlage = Datenbank Metathek = Metathek id: int = ormar. Integer (primary_key = true)(nicht bekannt) name: str = ormar. String (max_length = 100)[Bearbeiten | Quelltext bearbeiten] ManyToMany (natürlich) ##will produce default Through model like follows (Beispiel vereinfacht) Klassenlehrgang (ormar. model): Meta Klasse: Datengrundlage = Datenbank Metathek = Metathek tabellenname ="Students_courses" id: int = ormar. Integer (primary_key = true)(nicht bekannt) student = ormar. ForeignKey (Student)##default name (Name des Benutzers) course = ormar. ForeignKey (Course)#default name (Kurs) -
Zum Anpassen von Feld-/Relationsnamen im Through Modell können Sie jetzt den neuen Parameter von ManyToMany verwenden:
- through_relation_name-Feldname für ein Modell, das ManyToMany deklariert
- through_reverse_relation_name-Der Feldname für das Modell, auf das ManyToMany führt.
Beispiele:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
....#Kursentscheidung getroffen Klasse Schüler (ormar. Meta Klasse: Datengrundlage = Datenbank Metathek = Metathek id: int = ormar. Integer (primary_key = true)(nicht bekannt) name: str = ormar. String (max_length = 100)[Bearbeiten | Quelltext bearbeiten] ManyToMany (natürlich, through_relation_name ="Student_id"(durch_relation_name ="Schüler-ID"), through_reverse_relation_name ="Kurs-ID") #will produce default Through model like follows (Beispiel vereinfacht) Klassenlehrgang (ormar. model): Meta Klasse: Datengrundlage = Datenbank Metathek = Metathek tabellenname ="Students_courses" id: int = ormar. Integer (primary_key = true)(nicht bekannt) student_id = ormar. ForeignKey (Student)#set by through_relation_name (durch_Beziehung_name) course_id = ormar. ForeignKey (Kurs)#set by through_reverse_relation_name (durch_rückwärts-Relationsname)
🐛 Reparieren
- Fix weakref ReferenceError Fehler #118
- Fehler behoben, der durch Through fields verursacht wurde, wenn pydantic Config. extra ="forbid" gesetzt wurde.
- behebt Fehler Nr. 149, bei dem pydantic. PrivateAttr nicht unter__init__initialisiert wurde
- behebt einen Fehler, der den pydantic-type in dict () ausschloss und der Schlüssel__all__nicht funktioniert
💬Weitere
- Link zum automatischen Übersetzer sqlalchemy-to-ormar für ein Modell importieren
- Bietet Links zu Ormar-fähigen Fastapi-Ökosystembibliotheken
- Hinzufügen von Transaktionen zu einem Dokument (Datenbankunterstützung)
0.10.2
» Charaktereigenschaften
Model.save_related(follow=False)akzeptiert nun zwei zusätzliche Parameter:Model.save_related(follow=False, save_all=False, exclude=None).- save_all: bool-> Standardmäßig (also save_all = False) aktualisiert ormar nur das eingefügte nicht gespeicherte Modell (und damit ein neues oder neueres Modell) mit save_all = True Alle verwandten Modelle werden gespeichert, unabhängig vom Speicherstatus, was in Fällen nützlich sein kann, in denen das aktualisierte Modell von einem API-Aufruf stammt und sich daher nicht im Backend ändert.
exclude: Union[Set, Dict, None]-> Einstellungen/Wörterbuch Die Beziehungen, die Sie aus dem Speichern ausschließen möchten, werden auch bei Verwendung von follow = True und save_all = True nicht gespeichert Um verschachtelte Beziehungen auszuschließen, geben Sie ein verschachteltes Wörterbuch an, z. B.exclude={"child":{"sub_child": {"exclude_sub_child_realtion"}}}Die zulässigen Werte folgen dem Schema der fields/exclude_fields (von QuerySet) Methode, sodass Sie im Zweifelsfall auf das Dokument-> Feld auswählen-> Teilmenge in der Abfrage verweisen können. Die Model. update ()-Methode akzeptiert jetzt den Parameter_columns: List[str]= None, der akzeptiert, dass nur die Spalten, die aktualisiert werden, in der Datenbank aktualisiert werden Wenn Sie übergeben werden, beachtet update () nicht, dass die Instanz Ihres Modells einen anderen Wert als die Datenbank hat, wenn Sie mehr Spalten ändern, als Sie in der_columns-Liste übergeben haben! Die Model. model_dump ()-Methode, die bisher nur direkt verwandte oder verschachtelte Modelle enthielt (wenn sie nicht leer sein können und nicht virtuell sind), ist jetzt in dict () enthalten, auf die nicht ohne Schleife zugegriffen wurde Dies sollte nicht zerstört werden, da mehr Daten im Wörterbuch gespeichert werden, aber es sollte nicht verloren gehen.
QuerySet.delete(each=False, **kwargs)verlangte zuvor, dass Sie einen Filter übergeben (über**kwargs oder als separater filter ()-Aufruf) oder setzen each = True akzeptiert nun auch exclusive ()-Aufrufe, die den NOT-Filter generieren.- Das Gleiche gilt für
QuerySet.update(each=False, **kwargs)Sie werden auch aufgefordert, einen Filter zu übergeben, bevor Sie**kwargs, entweder als separater filter ()-Aufruf oder mit der Einstellung each = true, wird nun auch als except ()-Aufruf akzeptiert, der einen NOT-Filter generiert. - Das gleiche gilt für
QuerysetProxy.update(each=False, **kwargs)Sie werden auch aufgefordert, einen Filter zu übergeben, bevor Sie**kwargs, entweder als separater filter ()-Aufruf oder mit der Einstellung each = true, wird nun auch als except ()-Aufruf akzeptiert, der einen NOT-Filter generiert.
🐛 Reparieren
- Wenn die fk-Spalte einen anderen Datenbank-Alias hat, wurde eine falsche Auflösung des relationalen Felds in QuerysetProxy behoben.
- Es wurde ein Rekursionsfehler mit einer sehr komplexen Modellstruktur mit einer Schleife beim Aufruf von dict () behoben.
- Fehler behoben, der auftrat, wenn zwei nicht relationale Felder in Abfrageergebnissen kombiniert (angefügt) wurden, wenn es sich nicht um relationale Felder (d. h. JSON) handelte
- Fehler behoben, der bei der Übersetzung aus einer Liste in ein Wörterbuch denselben relationalen Namen in einer Kette verwendete, jedoch zu unterschiedlichen Modellen führte
- Fehler behoben, der auftrat, als bulk_create versuchte, die property_field-Modifizierungsmethode und das pydantische Feld zu speichern
- Korrigiert fehlerhafte Fusionen von tiefen verschachtelten Ketten in umgekehrten Beziehungen
💬Weitere
- Leistung optimieren.
- Getrennte Tests in Pakete basierend auf dem Testbereich
0.10.1
Charakteristisch
- fügt die Methoden get_or_none (**kwargs) zu QuerySet und QuerysetProxy hinzu, die genau mit get (**kwargs) identisch sind, aber ohne einen Datenbankeintrag, der mit der Bedingung übereinstimmt, get_or_none löst keine ormar. NoMatch-Ausnahme aus, sondern gibt einfach None zurück.
Reparieren
- Problem behoben, bei dem dialektbezogene Spaltennamen und Tabellennamenverweise in der order_by-Klausel in postgres nicht ordnungsgemäß funktionierten.
0.10.0
Durchbrechen.
- Wir haben die Unterstützung für die lange Zeit nicht mehr empfohlene Felddefinitionsnotation entfernt, in der Sie das ormar-Feld als Typhinweis verwenden, d. h.
test_field: ormar.Integger() = None - -verbesserter Typhinweis-> mypy kann die relevanten Modellfelder (ForeignKey und ManyToMany) und den Rückgabetyp der QuerySet-Methode korrekt analysieren, die nun das richtige Modell (d. h. Book) anstelle der ormar. Model-Typbeziehung und der Negation der QuerysetProxy-Methode zurückgeben, bleibt ein Problem, um den Teil der Typaufforderung, der jetzt Any zurückgibt, zu beheben #112.
Charakteristisch
- fügt die Methoden von
select_all(follow: bool = False)QuerySet und QuerysetProxy hinzu, die der load_all ()-Methode des Modells ähnlich sind, aber standardmäßig direkt in der Abfrage verwendet werden können select_all () fügt nur direkt verwandte Modelle hinzu, und follow = True fügt auch verwandte Modelle hinzu, ohne dass in der Beziehung eine Schleife auftritt. Beachten Sie, dass dies nicht das Ende eines asynchronen Modells ist, daher müssen Sie immer noch get (), all () usw. ausgeben, da select_all () QuerySet (oder Proxy) wie fields () oder order_by () zurückgibt.
Die innere Struktur
- Das ormar-Feld wird nicht mehr als Klasse im Meta. model_fields Wörterbuch gespeichert, sondern als Instanz.
0.9.9
Charakteristisch.
- Hinzufügen der Möglichkeit, die Standardreihenfolge von Beziehungen und Modellen zu ändern
- Um die Modellsortierung zu ändern, übergeben Sie orders_by =[columns] where columns: List[str] an die Modellmetaklasse.
- Um die Beziehung order_by zu ändern, geben Sie order_by =[columns] where columns: List[str] an.
- Um die umgekehrte Beziehung zu ändern order_by related_orders_by =[columns] where columns: List[str] Das* -Argument kann ein Spaltenname oder-{col_name}in absteigender Reihenfolge sein.
- In Beziehungen können Sie nur nach der Modellspalte sortieren, die direkt verwandt ist, oder bei mehreren Paaren mehrfacher Spalten auch nach der Modellspalte.
"{through_field_name}__{column_name}" - Die Reihenfolge, in der die order_by-Klausel angewendet wird, lautet wie folgt:
- Der Aufruf order_by () wird in einer Abfrage explizit übergeben
- Wenn die Beziehung existiert, wird sie durch orders_by
- Dateiendung ORDER_BY
- Modell Primärschlüsselspalten asc (Fallback; verwendet, wenn keines der oben genannten angegeben ist)
- Fügen Sie vier neue Aggregatfunktionen hinzu-> min, max, sum und avg sind jeweils ihre entsprechenden SQL-Äquivalente.
- Sie können einen oder mehrere Spaltennamen, einschließlich der zugehörigen Spalten, übergeben.
- Ab jetzt wird jede übergebene Spalte separat aggregiert (so ist es unmöglich, sum (col1 + col2), Sie können sum (col1, col2) verwenden und dann die Summe der 2 zurückgegebenen Zeilen in Python hinzufügen)
- Sie können keine nicht-numerischen Spalten addieren oder Mittelwerte berechnen.
- Wenn eine Spalte aggregiert wird, wird ein einzelner Wert direkt als Ergebnis zurückgegeben
- Wenn Sie mehrere Spalten aggregieren, wird ein Wörterbuch mit dem Ergebnis column: zurückgegeben
- fügt 4 neue Signale hinzu: pre_relation_add, post_relation_add, post_relation_remove und post_relation_remove. Das neu hinzugefügte Signal von richtet sich sowohl gegen die ManyToMany-Beziehung (beide Seiten) als auch gegen die Negation der Foreignkey-Beziehung (derselbe wie beim offenen QuerysetProxy). Das -Signal empfängt die folgenden Parameter: sender: Type[Model]-Sender-Klasse, instance: Model-Instanz des hinzugefügten Modells, child: Model-Name der Beziehung, in der Unterelemente hinzugefügt werden, z. B. der Name der Beziehung, in der das Signal hinzugefügt wurde auch über_kwargs: Wörterbuch-kwargs Wörterbuch, das an add () übergeben wurde.
Veränderung
- instanziiert jetzt multi-zu-multi-relationale Modelle zum Zeitpunkt der Erstellung, Löschung und Aktualisierung, sodass Sie nicht nur automatisch inkrementelle int als Primärschlüssel, sondern auch jeden Spaltentyp mit Standardfunktionalität bereitstellen können.
- Da das Through Modell nun instanziiert ist, können Sie auch Signale vor/nach dem Abonnieren des Through Modells speichern/aktualisieren/löschen. Der* pre_update-Signalempfänger erhält nun auch das Passed_args Argument, das das Dictionary ist, das den Wert der aktualisierten Funktion übergibt (falls vorhanden)(ansonsten leeres Dictionary).
Reparieren
- Sendet nun das pre_update-Signal vor dem Extrahieren des Werts, sodass Sie die übergebene Instanz direkt ändern können und der geänderte Feldwert in der Datenbank wiedergegeben wird.
- bulk_update kann nun auch den UUID-Primärschlüssel-Spaltentyp korrekt verwenden.
0.9.8
Charakteristisch
- Hinzufügen der Möglichkeit zum Verschlüsseln ausgewählter Felder in der Datenbank
- Mindestens müssen Sie Encrypt_secret und Encrypt_backend angeben.
- encrypt_backend kann eine der Enumerationen von ormar. EncryptBackends sein (NONE, FERNET, HASH, CUSTOM)-Standard: NONE
- Wenn Sie ein benutzerdefiniertes Backend auswählen, müssen Sie eine Back-End-Klasse der Unterklasse ormar. fields. EncryptBackend angeben
- Sie können keine Primary_key-Spalte und keine Off-Serie (FK und M2M) verschlüsseln.
- Zwei Backends verfügbar: HASH und FERNET
- Ein Hash ist ein Einweg-Hash (wie ein Passwort), der beim Abrufen nie entschlüsselt wird
- FERNET ist ein Backend für Zwei-Wege-Verschlüsselung/Entschlüsselung
- Beachten Sie , dass Sie im FERNET-Backend die Möglichkeit der Filterung vollständig verlieren , da ein Teil der verschlüsselten Werte ein Zeitstempel ist .
- Beachten Sie , dass Sie im HASH-Backend nach dem vollen Wert filtern können , aber Filter wie contains funktionieren aufgrund des Vergleichs der verschlüsselten Werte nicht .
- Beachten Sie , dass durch Hinzufügen von encrypt \ _ backend der Spaltentyp der Datenbank in TEXT geändert wird , was eine Reflexion in db durch Migration oder manuelle Änderung erfordert .
Reparieren
- (Premium/Intern) stellt die Funktion des benutzerdefinierten sqlalchemy-Typs (über die Unterklasse types . TypeDecorator) wieder her , der nicht mehr funktioniert , also wird process \ _ result \ _ value nie aufgerufen
0.9.7
Charakteristisch
-
Fügen Sie den isnull-Operator zum Filtern und Ausschließen von Methoden hinzu .
1 2
Album _ _ name _ _ isnull = True # (sql) (Übersetzung)album.nameist null) Album _ _ name _ _ isnull = False # (sql) (Übersetzung)album.namenicht Null)) -
fügt komplexe Abfragebeispiele hinzu , die für die Kombination der Funktionen ormar . or _und ormar . and _mit geschachtelten Bedingungen verwendet werden können :
1 2 3 4 5 6 7 8 9 10
Bücher ( Await sehenBook.objects.select_ related (" Der Autor ") Der Filter ( und _ ( ormar . or _ (Jahr _ _ gt = 1960 , Jahr _ _ lt = 1940) , author _ name = " J.R.R. Tolkien " , oder ) ) Das All () )Suchen nach aktualisierten Dokumenten in Abfragen - > Filtern und Sortieren - > Komplexe Filter
Weitere
Das Festlegen der Standardwerte von* auf ForeignKey oder ManyToMany führt zu einer ModelDefinition-Ausnahme , da diese nicht unterstützt wird (und in der Vergangenheit nicht unterstützt wurde) .
0.9.6
Wichtig
-
Dies ist keine große Änderung, da alles so funktioniert wie zuvor, wenn Sie es anbieten, wenn Sie also kein anderes Feld im Modell "durchlaufen" möchten oder müssen, können Sie es überspringen Beachten Sie, dass es automatisch für Sie erstellt wird und immer noch in das Beispiel einer alembic-Migration aufgenommen werden muss Wenn Sie eine vorhandene Datenbank löschen möchten, überprüfen Sie die Standardnamenskonvention, um die vorhandene Datenbankstruktur anzupassen.
Beachten Sie , dass Sie , wenn Sie den Namen des Through - Modells oder der Datenbanktabelle anpassen möchten , ihn dennoch angeben müssen .
Charakteristisch .
- Beachten Sie, dass eine Aktualisierung wie in QuerySetupdate die Anzahl der aktualisierten Modelle zurückgibt und das relationale Modell nicht aktualisiert wird Um die Daten zu erhalten, die am übergeordneten Modell aktualisiert werden, müssen Sie das relationale Modell aktualisieren (d. h., um das relationale Modell zu aktualisieren).
await model_instance.related.all()) - fügt die
load_all(follow=False, exclude=None)Model-Methode hinzu, die es ermöglicht, die aktuelle Instanz des Modells sowie alle zugehörigen Modelle in einem Aufruf zu laden Standardmäßig werden nur die direkt verwandten Modelle geladen, aber die Einstellung follow = True führt dazu, dass der Baum durchlaufen wird (Schleifen vermeiden) Sie können auch die gleichen Ausschlussparameter übergeben wie die QuerySet. exclude_fields ()-Methode. - Es wurde die Möglichkeit hinzugefügt, weitere Felder in einem Mehr-zu-Mehr-Beziehungen Through Modell hinzuzufügen:
- Der Name des through Model Felds ist der kleingeschriebene Name der Through Klasse.
- Sie können zusätzliche Felder übergeben, wenn Sie add (child,**kwargs) auf einer Beziehung aufrufen (auf QuerysetProxy).
- Wenn einer der Schlüsselwortargumente ein Modellname mit einem Wörterbuch mit Werten sein sollte, können Sie den Aufruf create () auf relationalen (auf QuerysetProxy) ausführen.**kwargs), während andere Felder übergeben werden
- Sie können sie über das Modell bestellen.
- Sie können sie durch die Modellfelder filtern.
- Sie können Felder durch Modelle ein-und ausschließen
- through Modelle werden nur an verwandte Modelle angehängt (d. h. wenn Sie von A nach B fragen-> nur auf B)
- Beachten Sie, dass das Passthrough-Modell explizit ohne Beziehung geladen wird-> Beziehungen werden in das Feld "ManyToMany" ausgefüllt.
- Beachten Sie, dass wie zuvor, als Sie keine relationalen Felder über Ihr Modell deklarieren konnten, diese von ormar für Sie ausgefüllt werden, aber jetzt wird ein ModelDefinitionError ausgegeben, wenn Sie versuchen, dies zu tun.
- Überprüfen Sie die aktualisierte Dokumentation zu den ManyToMany-Beziehungen für weitere Informationen
Weitere
- Aktualisierte Dokumentation und API
- Refactoring und Optimierung beziehen sich hauptsächlich auf Filter, Ausschlüsse und Sortierung
0.9.5
Reparieren
- Behebt ein Problem mit der Erstellung von pydantic FieldInfo nach dem Update auf Version>= 1.8.
- Fixieren der erforderlichen Abhängigkeitsversionen, um solche Situationen in Zukunft zu vermeiden
0.9.4
Reparieren
- Automatische Erzeugung des fastapi OpenAPI-Schemas für die Dokumentation, wenn mehrere Modelle auf dasselbe relevante Modell verweisen
0.9.3
Reparieren
- Behebung eines Problems, bei dem JSON-Felder bei der Initialisierung nach dem Einstellen von Werten doppelt maskiert wurden
- Behebung eines Problems, bei dem JSON-Felder aufgrund der pydantischen internen Struktur nicht eingehalten wurden, die für leere Felder eingestellt werden konnten
- Selection Validation für JSON-Felder beheben
- Beheben von Optionen, die nach der Initialisierung beim Festlegen von Eigenschaften nicht überprüft wurden
- Beheben von Optionen, die während eines QuerySet-Aktualisierungsaufrufs nicht überprüft wurden
0.9.2
Weitere
- Aktualisiert den Schnellstart in der Dokumentation/Readme
- Aktualisierte Dokumentation, die Links zu den Unterseiten der Abfrage enthält
- Badges für Code-Klima und Download-Volumen hinzugefügt
0.9.1
Charakteristisch.
- Fügen Sie der OpenAPI-Spezifikation den Optionswert hinzu, damit er wie ein natives Enum-Feld im Ergebnisschema aussieht.
Reparieren
- Wenn spezielle Felder noch nicht initialisiert sind, aber als Zeichenfolgen usw. übergeben werden, wird fastapi verwendet, um das Selektionsverhalten reparieren zu verwenden.
0.9.0
wichtig ist.
- -Bremsanpassung: In Version 0.8.0 wurde ein Fehler eingeführt, der das Generieren einer foreign_keys-Einschränkung in der Datenbank verhinderte, sowohl in alembic als auch während der Erstellung über sqlalchemy. engine.
- Wenn Sie also Version>= 0.8.0 verwenden, wird dringend eine Aktualisierung empfohlen, da die mit ormar (oder ormar + alembic) erstellten Datenbanken keine Beziehungen haben und sowohl aus Leistungs-als auch aus Datensicht beeinträchtigt werden Integrität.
- Wenn Sie ormar verwenden, um eine Verbindung mit einer vorhandenen Datenbank herzustellen, sollte die Leistung und Integrität gut sein, Sie sollten jedoch alle zukünftigen Schemaaktualisierungen im Modell berücksichtigen.
Durchbrechen.
- BREAKING: Alle Fremdschlüssel und eindeutigen Integritätsregeln haben jetzt einen Namen, sodass Alembic sie in einer Datenbank erkennen kann, ohne von der Datenbank abhängig zu sein.
- -Verletzung: Wenn die Metaklasse eines Modells keine Metadaten oder Datenbanken während des Modellkonstrukts enthält, wird jetzt ein ModelDefinitionError anstelle eines allgemeinen AttributeError ausgelöst.
- beschädigt: Die Codierung/Datenbank, die zum Ausführen der Abfrage verwendet wird, hat keinen Verbindungspool für das sqlite-Backend, was bedeutet, dass jede Abfrage mit einer neuen Verbindung ausgeführt wird und Fremdschlüsseleinschränkungen nicht aktiviert werden können, da diese Beschränkungen standardmäßig in ormar geschlossen wurden, wobei jede sqlite3-Abfrage standardmäßig "PRAGMAforeign_keys = 1;" hat. Führen Sie aus, damit nun für jede sqlite3-Verbindung standardmäßig Fremdschlüsseleinschränkungen einschließlich Kaskaden erzwungen werden.
Weitere
- Aktualisierung der API-Archive.
- Hinzufügen von Tests zum Erstellen von fk in der Datenbank und zum Kaskaden in der Datenbank
0.8.1
Charakteristisch.
- beschreibt die Verarbeitung von ForwardRef in Beziehungen Sie können jetzt selbstreferenzierende Modelle erstellen-Fremdschlüssel und Mehrpaar-Polyrelationen ForwardRef können für to und throughModel verwendet werden.
-
Einführung der Möglichkeit, zwei identische relationale Verbindungen in einer Abfrage auszuführen, um komplexe Beziehungen zu verarbeiten, z. B.:
1 2 3 4 5 6 7
wobei x = y // A haben \ Bevor Sie von X zu Y nur einmal in einer Abfrage verbinden können Mindestens zwei unterschiedliche Beziehungen wurden verwendet (two Vergleich von Feldern mit verschiedenen Namen -
Einführung einer Auslagerungsmethode, die eine Einschränkung/Verschiebung nach Seite und page_size ermöglicht, die sowohl mit QuerySet als auch mit QuerysetProxy verfügbar ist.
Weitere
- Refactoring und Leistungsoptimierung in Abfragen und Verbindungen.
- Python 3.9 wurde zu Tests und PYPI-Einstellungen hinzugefügt.
- API-Dokumentation und-Dokumentation aktualisieren->, d.h. Trennung von Abfragedokumenten.
0.8.0
Durchbrechen.
- Breaking: remove () Der Parent des Neutronenterminals der Reverse-Fremdschlüssel-Beziehung muss nun einen Relationsnamen übergeben, da dasselbe Modell mehrfach registriert werden kann und ormar wissen muss, aus welcher der Parent-Beziehungen Sie Kinderstufen entfernen möchten.
- funktioniert mit: Standardmäßig gilt die Verwendung von select_lated, um die Einschränkungen und Offsets nur auf die Haupttabelle vor der Verbindung anzuwenden-> bedeutet, dass nicht die Anzahl der Zeilen begrenzt ist, sondern nur die Anzahl des Hauptmodells (die erste in der Abfrage, um sie zu konstruieren) Sie können immer noch das Flag limit_raw_sql = True in der Antwort der Datenbank verwenden, um alle Zeilen in der Antwort auf die Einschränkung oder den Offset (oder beide) zu begrenzen.
- -Verletzung: wenn first () ausgegeben wird, erhält man nun die erste Zeile, die nach Primärschlüssel asc sortiert ist (daher die erste eingefügte Zeile (möglicherweise anders bei einem nicht-numerischen Primärschlüssel-d. h. die alphabetische Reihenfolge von Zeichenfolgen))
- -Verletzung: das Ausgeben von get () ohne Filter erhält nun die erste Zeile, die nach dem Primärschlüssel desc sortiert ist (daher sollte es die letzte eingefügte sein (was bei nicht-numerischen Primärschlüsseln anders sein könnte-d.h. die alphabetische Reihenfolge von Zeichenfolgen)
- Abbrechen (intern): Die in Meta. columns gespeicherten sqlalchemy-Spalten sind nicht mehr an die Tabelle gebunden, sodass Sie die Spalten nicht direkt von dort abrufen können,
Charakteristisch.
- Zur Zeit sind zwei Arten von Vererbung möglich:
- Mixins-Unterklasse ormar. Model nicht, definieren Sie einfach die Felder, die später auf verschiedenen Modellen verwendet werden (z. B. created_date und updated_date auf jedem Untermodell), nur das tatsächliche Modell erstellt die Tabelle, fügen Sie aber die Felder im Mixin hinzu
- Spezifische Tabellenvererbung-bedeutet, dass das Parent in der Meta Klasse als abstract = True markiert ist und dass jedes Kind seine eigene Tabelle hat, die Spalten von Parent und eigene Spalten auf Sublevel enthält, ein bisschen wie Mixins, aber das Parent ist auch ein (abstraktes) Modell.
- Weitere Informationen finden Sie in der Dokumentation zum Abschnitt Modell-> Vererbung.
- QuerySet first () kann mit prefetch_lated verwendet werden.
Reparieren
- Korrigiert kleinere Fehler in order_by im Hauptmodell orderby
- Repariert Prefetch_query für mehrere related_names im selben Modell.
- behebt ein Problem, bei dem dieselben related_name für verschiedene Modelle dazu führte, dass sich die gleichen relationalen Modelle gegenseitig überschrieben, wodurch nun ein ModelDefinitionError ausgelöst wurde, und Sie den Namen ändern müssen.
- Problem behoben, durch das order_by Bedingungen überschreibt, wenn mehr als eine Verknüpfung zu derselben Tabelle angewendet wurde.
Das Archiv
- Aufräumen und Aufräumen in Dokumenten :
- Teilen Sie das Modell in mehrere kleine Teile
- Aufteilung der Beziehung in Unterabschnitte
- Teilen Sie den Satz in kleine Teile
- Hinzufügen des Modellteils Erben
- Hinzufügen von API (Beta) - Dokumentation
0.7.5
- Fehler in der Beziehung Spaltennamen in " Many \ _ to \ _ many " relationale Verbindung behoben (Fix #73)
0.7.4
- Es sind mehrere Beziehungen zu demselben relationalen Modell/derselben Tabelle zulässig .
- Fehler behoben , der in der " Many \ _ to \ _ many " - Verbindung verwendet wurde (Fix #73)
- Es wurde eine Fehlergruppe für m2m-Beziehungen behoben , wenn auch fk-Beziehungen für dasselbe Modell vorhanden waren .
- Wenn es mehrere Beziehungen zur gleichen Tabelle in einem Modell gibt , fügen Sie hinzu , um zu überprüfen , ob der Benutzer related \ _ name bereitstellt .
- Vordringlicher , tote schwache Agentenmodelle zu entfernen .
0.7.3
- Ein Problem mit der UUDI pk-Einstellung für das Abrufen verwandter Modelle wurde behoben , bei dem UUDI pk die ursprüngliche Zeichenfolge ist (Fix #71) .
0.7.2
- repariert ein Problem , das nur das zugehörige Modell mit pk überschreibt
Model.update() with fields passed as parameters(Fix #70)
0.7.1
- Reparatur ist nur inModel.saveProbleme beim Überschreiben des betreffenden Modells mit pk (Fix #68)
0.7.0
- -Verletzung : Die QuerySetbulk \ _ update-Methode löst jetzt einen ModelPersistenceError anstelle eines QueryDefinitionError für ein übergebenes , nicht gespeichertes Modell aus
- Durchbruch : Modellinitialisierung mit unbekannten Feldnamen führt jetzt zu einem ModelError anstelle eines KeyError
- fügt Signale hinzu , hat vordefinierte Listensignale und Dekoratoren : post \ _ delete , post \ _ save , post \ _ update , pre \ _ delete , pre \ _ save , pre \ _ update
- py . typed hinzufügen und ändernsetup.pyUnterstützung für MySpace
- Leistung optimiert .
- Aktualisierung Archiv
0.6.2
- Leistung optimieren .
- Es wurde ein Fehler behoben , der das Feld pydantic \ _ only erforderte .
- fügt einen property \ _ field-Dekorator hinzu und registriert die Funktion als Eigenschaft , die in den Antworten Model . model \ _ dump () und fastapi enthalten ist .
- Aktualisierung Archiv
0.6.1
- Stellen Sie None explizit ein, um Felder auszuschließen, die leer sein können, um zu verhindern, dass pydantic den Standardwert setzt (Fix #60).
0.6.0
- Absturzversuch: Der Aufruf von instance. load () beim Entfernen von Instanzzeilen aus der Datenbank löst nun einen NoMatch anstelle eines ValueError aus
- Abbrechen: Aufrufe zum Hinzufügen und Entfernen der ReverseForeignKey-Beziehung aktualisieren nun die Datenbankeinstellungen/entfernen untergeordnete Modelle in der fk-Spalte
- Durchbruch: ReverseForeignKey-Beziehungen veröffentlichen jetzt die QuerySetProxy-API wie ManyToMany-Beziehungen
- Beschädigung: Durch das Abfragen eines verknüpften Modells aus ManyToMany wird die Liste der im übergeordneten Modell geladenen zugehörigen Modelle gelöscht:
- -Beispiel: post. categories. first () setzt post. categories auf eine Liste verwandter Modelle-> das von first () zurückgegebene Modell
- Beispiel 2: Wenn ein Beitrag 4 Kategorien hat, ruft len (post. categories)== 4 auf
post.categories.limit(2).all()- > Es werden nur zwei Unterprozesse geladenassert len(post.categories) == 2
- fügt QuerySetProxy get_or_create, update_or_create, fields, exclude_fields, exclusion, prefetch_lated und order_by hinzu, sodass Sie diese Methoden jetzt direkt aus Ihrer Beziehung verwenden können.
- Aktualisierung Archiv
0.5.5
- hat ein Problem mit der automatischen Generierung von alembic für migrierte UUID-Spalten behoben, das nur sqlalchemy CHAR (32) oder CHAR (36) generieren sollte. Damit* funktioniert, müssen Sie user_module_prefix ='sa' setzen (muss der sqlalchemy_module_prefix-Option entsprechen (der Vorgabewert ist 'sa').
0.5.4
-
ermöglicht das Übergeben von uuid_format (das "hex"(Standard) oder "string") an ein UUID-Feld, um sein Speicherformat zu ändern Standardmäßig werden Felder im hexadezimalen Format gespeichert (auf 32 Zeichen gekürzt (ohne Bindestriche)), aber Sie können format ="string" übergeben, um eine vorhandene Datenbank oder eine andere Bibliothek mit 36 (mit Bindestrichen) anzupassen.
Sample sein:
- Hexadezimalwert = c616ab438cce49dbf4380d109251dce
- Zeichenfolgenwert = c616ab43 - 8cce-49db-bf43 - 80d109251dce
0.5.3
- Es wurde ein Fehler in der Model. model_dump ()-Methode behoben, bei dem Ausschlussparameter ignoriert wurden und keine Wörterbuchparameter enthalten waren.
0.5.2
- Die Prefetch_lated-Methode wurde hinzugefügt, um nachfolgende Modelle in eine separate Abfrage zu laden.
- Aktualisierung Archiv
0.5.1
- Wechsel zu Github Actions statt zu Travis
- Badges im Archiv aktualisieren
0.5.0
- Saved-Status hinzugefügt-> Sie können überprüfen, ob ein Modell mit der Eigenschaft ModelInstance. saved gespeichert wurde
- Speichern/Aktualisieren/Laden/Aktualisieren der Einfügemethode nach dem Speichern des Modells
- -Modell nach
create/get/first/all/get_or_create/update_or_create-Methode gespeichert - Das Modell wird gespeichert, wenn es an bulk_update und bulk_create übergeben wird.
- Speichern von Modellen nach Hinzufügen/Entfernen von mit ManyToMany verknüpften Objekten (automatisch speichern/löschen über Modellinstanzen)
- Das Modell wird nicht gespeichert , nachdem Sie eines Ihrer eigenen Felder geändert haben (auch alsModel.pkPK genannt) .
- Das Modell wurde nach dem Hinzufügen/Entfernen von ForeignKey-Objekten nicht gespeichert (fk-Spalte nicht gespeichert)
- speichert das Modell nicht , nachdem es mit \ _ _init _\ _ instanziiert wurde (vor der Verwendung von QuerySet . create oder dem Aufruf von save)
- Model. upsert hinzufügen ()*kwargs), wenn pk nicht gesetzt ist, führen Sie save () aus, andernfalls update ().*Kwargs)
Model.save_related(follow=False)überprüft alle verwandten Objekte in allen Beziehungen und überprüft , ob sie gespeichert sind , oder nicht , und ruft upsert () für jedes Objekt auf .- Beschädigen : Hinzufügen/Entfernen einer Ausnahme , wenn nicht gespeicherte (pk ist None) Modelle in eine Mehr-zu - Mehr-Beziehung eingefügt/entfernt werden
- Erlaubt die Weitergabe von Dictionaries und Sammlungen an fields und except \ _ fields .
- Automatische Übersetzung von str und Listen in Wörterbücher für Felder und except \ _ fields
- Unterbrechen : Die Weitergabe verschachtelter Modelle an fields und excre _ fields erfolgt nun über den zugehörigen Fremdschlüsselnamen anstelle des Zielmodellnamens .
- Leistungsoptimierung - unter modelproxy , newbasemodel - Abfragereduzierung > Einige Eigenschaften werden im Modell zwischengespeichert
- Nicht verwendeter relationaler Code entfernen
- Hinzufügen einer optionalen Leistungsabhängigkeit orjson (sehr zu empfehlen)
- Aktualisierung Archiv
0.4.4
- Hinzufügen der except \ _ fields () - Methode zum Ausschließen von Feldern aus SQL
- Wiederherstellung der Namensgebung (NAME)
- Reparieren Sie Spalten mit anderen Namen in der Reihenfolge
- Zusätzliche Tests für fields und except \ _ fields
- Aktualisierung Archiv
0.4.3
- Enthält Eigenschaften in models . model \ _ dump () und model . model \ _ dump \ _ json ()
0.4.2
- Änderung der Erstellung eines pydantischen Modells , um die Rückgabe verwandter Modelle zu ermöglichen , die nur mit pk gefüllt sind
0.4.1
- Die order \ _ by Methode zum Abfragesatz hinzufügen , um die Sortierung zu ermöglichen
- Aktualisierung Archiv
0.4.0
- ändert die Symbole in der Modelldefinition - > verwendet nun name = ormar . Field () anstelle von name : ormar . Field ()
- Bitte beachten Sie , dass die alte Notation immer noch unterstützt wird , aber veraltet ist und nicht gut mit statischen Prüfern wie mypy und pydantic pycharm Plugin funktioniert .
- Dateien eingeben und testen.
- Sie können auch nicht mit mypy testen, nur mit dem ormar-Paket.
- Reparieren Sie Skalierung und Genauigkeit Konvertierungen mit den Feldern max_digits und decimal_places pydantic Decimal
- Dokumentation aktualisieren-Best Practices zum Hinzufügen von Abhängigkeiten
- Refactoring von Metaklassen und model_fields zur besseren Verwendung von Typhinweise
- Hinzufügen von mypy-und pydantischen Plug-ins zum Dokument
- Archivieren von mehr zu vielen Beziehungen
0.3.11
- Problem behoben, bei dem server_default auf den Standardfeldwert in Python gesetzt wurde
0.3.10
- Postgresql-Prüfungen wurden behoben, um eine Ausnahme zu vermeiden, bei der kein Treiber installiert war, wenn ein anderes Backend verwendet wurde
0.3.9
- Reparieren Sie JSON-Modus-Builds ab #19
- Problem mit nicht initialisierten MandyToMany-Beziehungen in fastapi-Kopien von ormar. Models behoben
- Dokumentation über die Verwendung von FastAPI aktualisieren
- Tests hinzufügen, um zu überprüfen, ob fastapi/docs korrekt generiert wurde
0.3.8
- Es wurde die Möglichkeit hinzugefügt, allen Feldern einen alternativen Datenbankspaltennamen mit einem Namensparameter bereitzustellen.
- Es wurde ein Fehler behoben, durch den fields () verwendet wurde, um relevante ManyToMany-Felder auszuwählen, wenn sie leer sind.
- Aktualisierung Archiv
0.3.7
- Veröffentlichen von Dokumenten und Aktualisieren von Selbstauskünften
0.3.6
- Fügen Sie die fields ()-Methode zum Einschränken der ausgewählten Spalten in der Datenbank hinzu-nur Spalten, die leer sein können, können ausgeschlossen werden.
- UniqueColumns und die Restraint List wurden dem Modell Element hinzugefügt, um eindeutige Einschränkungen für die Spaltenliste zu erstellen.
- Ein UUID-Feldtyp, der auf dem Char (32)-Spaltentyp basiert, wurde hinzugefügt.
0.3.5
- Hinzugefügt bulk_create und bulk_update für Operationen auf mehrere Objekte.
0.3.4
Hinzufügen von Abfragesammlungs-Ebene Methoden
- Streichung
- Aktualisierung
- Erwerben oder schaffen
- Aktualisierung oder Schöpfung
0.3.3
- Hinzufügen zusätzlicher Filter-Anfang und Ende
0.3.2
- Optionsparameter zu allen Feldern hinzufügen-Beschränken Sie die akzeptierten Werte auf die angegebenen Werte
0.3.1
- Es wurde ein Ausschluss hinzugefügt, um zu filtern, wo nicht Bedingung.
- Es wurden Tests für mysql und postgres hinzugefügt und ein Problem mit postgres behoben.
- Reinigungs-und Reinigungsarbeiten.
0.3.0
- Das ManyToMany-Feld wurde hinzugefügt und unterstützt Multi-to-Multi-Beziehungen.