Zurück zu den Originaldaten
Mit den folgenden Methoden können Sie eine Abfrage ausführen, ohne das ormar-Modell, sondern ein Dictionary oder eine Tupelliste zurückzugeben.
-
values(fields = None, exclude_through = False) -> List[Dict]
-
values_list(fields = None, exclude_through = False, flatten = False) -> List
-
Frage an den Vereinsvertreter
QuerysetProxy.values(fields = None, exclude_through = False) Die Methode
QuerysetProxy.values_list(fields = None, exclude_through= False, flatten = False) Die Methode
!!!Beachten Sie, dass values und values_list die Analyse des Ergebnisses in ein ormar-Modell und damit auch die Überprüfung des Ergebnisses überspringen!
!!!warnt davor, dass jeder Eintrag in der Ergebnisliste eine 1:1-Spiegelung der Abfrageergebniszeile ist Da Zeilen nicht analysiert werden, wenn Sie eine 1:1-oder Mehr-zu-Mehr-Beziehung haben, werden doppelte Spaltenwerte im Ergebniseintrag angezeigt, wenn eine übergeordnete Zeile mehrere verwandte Zeilen aufweist.
Werte sind
values(fields: Union[List, str, Set, Dict] = None, exclude_through: bool = False) -> List[Dict]
Gibt eine Liste von Wörterbüchern zurück, die die Werte repräsentieren, die aus Spalten in der Datenbank stammen.
Sie können eine Teilmenge von Feldern mithilfe des fields-Parameters auswählen, die denselben Parametersatz wie die fields ()-Methode akzeptiert.
Beachten Sie, dass das Übergeben von Feldern an values (fields) eigentlich eine Abkürzung zum Aufrufen von fields (fields). values () ist.
!!!tip Um mehr darüber zu erfahren, was an Felder übergeben werden kann und wie verschachtelte Modellfelder ausgewählt werden, lesen Sie das Dokument Spalten auswählen.
Sie können die Anzahl der Zeilen begrenzen, indem Sie Kriterien in filter () und except () angeben, aber beachten Sie, dass Sie selbst dann, wenn nur eine Zeile (oder keine Zeile!) Ihren Kriterien entspricht, eine Liste als Antwort zurückgeben.
Beispiele:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 | #declared models definiert
Klasse Kategorie (ormar. Modell):
ormar_config = base_ormar_config. copy (tablename ="Kategorien")
id: int = ormar. Integer (primary_key = true)(nicht bekannt)
name: str = ormar. String (max_length = 40)
sort_order: int = ormar. Integer (null = true)[Bearbeiten | Quelltext bearbeiten]
Klasse Post (ormar. model):
ormar_config = base_ormar_config. copy ()(= Grundeinheit von Ormar_config. copy)
id: int = ormar. Integer (primary_key = true)(nicht bekannt)
name: str = ormar. String (max_length = 200)[Bearbeiten | Quelltext bearbeiten]
Kategorie: Optional [Category]= ormar. ForeignKey (Category)
Beispiel: sample data
news = await Category (name ="Nachrichten", sort_order = 0). save ()
await Post (name ="Ormar strikes again!", Kategorie = Nachrichten). save ()
await Post (name ="Warum benutzen Sie Ormar Yet nicht?", category = news). save ()
await Post (name ="Check this out, ormar now for free", category = news). save ()()()("Überprüfen Sie dies jetzt, ormar jetzt für frei", category = news).
|
Besuch des Postmodells:
| posts = await Post. objects. values ()[Bearbeiten | Quelltext bearbeiten]
Anschreiben [][
{"id": 1, "name": "Ormar strikes again!", "category": 1},
{"id": 2, "name": "Why don't you use ormar yet?", "category": 1},
{"id": 3, "name": "Check this out, ormar now for free", "category": 1},
]
|
Um ein verwandtes Modell gleichzeitig auszuwählen, verwenden Sie select_lated oder prefetch_lated.
Beachten Sie, dass die verschachtelte Modellspalten mit dem vollständigen relationalen Pfad des autonomen Modells (das in der Abfrage verwendete Modell) vorangestellt sind.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 | #declare-Modelle
Klasse Benutzer (ormar. Model):
ormar_config = base_ormar_config. copy ()(= Grundeinheit von Ormar_config. copy)
id: int = ormar. Integer (primary_key = true)(nicht bekannt)
name: str = ormar. String (max_length = 100)
Klasse Rolle (ormar. Modell):
ormar_config = base_ormar_config. copy ()(= Grundeinheit von Ormar_config. copy)
id: int = ormar. Integer (primary_key = true)(nicht bekannt)
name: str = ormar. String (max_length = 100)
users: List [Benutzer]= ormar. ManyToMany (Benutzer)
Beispiel: sample data
creator = await Benutzer (name ="Anonymous"). save ()
admin = await Role (name ="admin"). save ()= await Role (name ="admin") und
editor = await Role (name ="Herausgeber"). save ()
await creator. roles. add (admin) erstellen
await creator . roles . add (Herausgeber)
|
Benutzer mit Rolle auswählen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 | Benutzer = AwaitUser.objects.select_ related (" Rollen ") . values () (" Eigenschaften ")
# note nested prefixes : roleuser und rollen
Benutzer : [
{
" ID " ist 1 ,
Vorname : " Anonymous "
" roleuser _ _ id " : 1 , oder
roleuser _ _ role : 1 , oder
roleuser _ _ user : 1 , oder
„ roles _ _ id " : 1 , oder
„ roles _ _ name " : „ admin " oder „ admin " ,
},
{
" ID " ist 1 ,
Vorname : " Anonymous "
" roleuser _ _ id " : 2 , oder
roleuser _ _ role : zwei ,
roleuser _ _ user : 1 , oder
„ roles _ _ id " : zwei ,
roles _ name : " Herausgeber " ,
},
]
|
!!!Beachten Sie , dass die Beziehung zwischen einer Rolle und einem Benutzer mehrere : mehrere ist , sodass Sie standardmäßig auch Modellspalten erhalten .
Kombinieren Sie relevante Felder und Felder , um nur drei Felder auszuwählen .
Beachten Sie , dass wir die Definition auch durch das Modell ausschließen , da per Definition von jedem Modell , das im Join enthalten ist , aber keine Verweise auf das Feld enthält , angenommen wird , dass es vollständig ausgewählt ist (einschließlich aller Felder) .
!!!Beachten Sie , dass Sie im Gegensatz zu den anderen Abfragesatzmethoden hier das Zwischenmodell ausschließen , aber die Spalte am Ende beibehalten können , was bei der Analyse der Rohdaten in das Modell keinen Sinn ergibt .
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 | So in relation category - > category _ x _ post - > post - > Benutzer können schließen
category _ x _ post and post models but can keep the user one . [ Bearbeiten | Quelltext bearbeiten ]
Kontext , der nicht möglich ist , wie wenn Sie möchten , dass durch und nach Modell
Es gibt keine Möglichkeit , das Benutzermodell aus der Kategorie des Modells zu ermitteln .
Benutzer : (
Await istRole.objects.select_ related (" Benutzer _ _ categories ")
. filter (Vorname = " admin ")
. fields ({" name " : ... , " users " : {" name " : ... , " categories " :{"name"}}) {" name " : " Benutzer " : {" name " : ... , " categories " :{"name"}}})
. exclude _ fields (" roleuser ") Bearbeiten
Die Werte ()
)
Benutzer : [
{
Vorname : „ admin " ,
users _ name : „ Anonym " oder „ Anonym "
" users _ _ categories _ _ name " : " Neuigkeiten " ,
}
]
|
Wenn die Abfrage mehrere ManyToMany-Modelle enthält , müssen Sie jedes Modell manuell ausschließen .
Um diese Belastung zu vermeiden , bietet ormar den Parameter except \ _ through = False an , der alle Modelle vollständig ausschließt , wenn dieses Flag auf True gesetzt ist .
1
2
3
4
5
6
7
8
9
10
11
12
13
14 | # equivalent to query above , note lack of exclude _ fields call # gleichwertig zu above , note lack of exclude _ fields call
Benutzer : (
Await istRole.objects.select_ related (" Benutzer _ _ categories ")
. filter (Vorname = " admin ")
. fields ({" name " : ... , " users " : {" name " : ... , " categories " :{"name"}}) {" name " :{"name"}"}
. values (außer _ durch = true)
)
Benutzer : [
{
Vorname : „ admin " ,
users _ name : „ Anonym " oder „ Anonym "
" users _ _ categories _ _ name " : " Nachrichten " ,
}
]
|
Liste der Werte
values_list(fields: Union[List, str, Set, Dict] = None, flatten: bool = False, exclude_through: bool = False) -> List
Gibt eine Liste von Tupeln zurück, die Werte darstellen, die Spalten aus der Datenbank darstellen.
Sie können eine Teilmenge von Feldern mithilfe des fields-Parameters auswählen, die denselben Parametersatz wie die fields ()-Methode akzeptiert.
Beachten Sie, dass das Übergeben eines Felds an values_list (fields) eigentlich eine Abkürzung zum Aufrufen von fields (fields). values_list () ist.
!!!tip Um mehr darüber zu erfahren, was an Felder übergeben werden kann und wie verschachtelte Modellfelder ausgewählt werden, lesen Sie das Dokument Spalten auswählen.
Wenn Sie nur eine Spalte/Feld auswählen, können Sie übergeben flatten = true, die eine Liste von Werten statt einer Liste von Tupel von Elementen zurückgibt.
!!!-Warnung Wenn Sie mehrere (oder keine, also alle) Felder auswählen, löst das Festlegen von flaten = True eine QueryDefinitionError-Ausnahme aus.
Sie können die Anzahl der Zeilen begrenzen, indem Sie Kriterien in filter () und except () angeben, aber beachten Sie, dass Sie selbst dann, wenn nur eine Zeile (oder keine Zeile!) Ihren Kriterien entspricht, eine Liste als Antwort zurückgeben.
Beispiel:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 | #declared models definiert
Klasse (ormar. Modell):
ormar_config = base_ormar_config. copy (tablename ="Kategorien")
id: int = ormar. Integer (primary_key = true)(nicht bekannt)
name: str = ormar. String (max_length = 40)
sort_order: int = ormar. Integer (null = true)[Bearbeiten | Quelltext bearbeiten]
Klasse Post (ormar. model):
ormar_config = base_ormar_config. copy ()(= Grundeinheit von Ormar_config. copy)
id: int = ormar. Integer (primary_key = true)(nicht bekannt)
name: str = ormar. String (max_length = 200)[Bearbeiten | Quelltext bearbeiten]
Kategorie: Optional [Category]= ormar. ForeignKey (Category)
Beispiel: sample data
news = await Category (name ="Nachrichten", sort_order = 0). save ()
await Post (name ="Ormar strikes again!", Kategorie = Nachrichten). save ()
await Post (name ="Warum benutzen Sie Ormar Yet nicht?", category = news). save ()
await Post (name ="Check this out, ormar now for free", category = news). save ()()()("Überprüfen Sie dies jetzt, ormar jetzt für frei", category = news).
|
Besuch des Postmodells:
| posts = await Post. objects. values_list ()[Bearbeiten | Quelltext bearbeiten]
#note how columns refer to id, name and category (fk) Wie Farbfelder sich auf ID, Name und Kategorie beziehen (fk)
Anschreiben [][
(1,"Ormar strikes again!", 1),(Ormar schlägt wieder!)
(2,"Warum benutzen Sie nicht Ormar Yet?", 1),
(3,"Check this out, ormar now for free", 1), oder
]
|
Um ein verwandtes Modell gleichzeitig auszuwählen, verwenden Sie select_lated oder prefetch_lated.
Lassen Sie uns die Beziehungen verkomplizieren und das zuvor erwähnte Kategoriemodell so ändern, dass es auf das Benutzermodell verweist.
| Klasse Kategorie (ormar. Modell):
ormar_config = base_ormar_config. copy (tablename ="Kategorien")
id: int = ormar. Integer (primary_key = true)(nicht bekannt)
name: str = ormar. String (max_length = 40)
sort_order: int = ormar. Integer (null = true)[Bearbeiten | Quelltext bearbeiten]
Die neue Column Below
created_by: Optional [Benutzer]= ormar. ForeignKey (Benutzer, related_name ="Kategorien")
|
Nun werden Beispieldaten mit Benutzerverknüpfungen erstellt.
| creator = await Benutzer (name ="Anonymous"). save ()
admin = await Role (name ="admin"). save ()= await Role (name ="admin") und
editor = await Role (name ="Herausgeber"). save ()
await creator. roles. add (admin) erstellen
await creator. roles. add (Herausgeber)
news = await Category (name ="News", sort_order = 0, created_by = creator). save ()[Bearbeiten | Quelltext bearbeiten]
|
Kombinieren Sie relevante Felder und Felder, um nur drei Felder auszuwählen.
Beachten Sie, dass wir die Definition auch durch das Modell ausschließen, da per Definition von jedem Modell, das im Join enthalten ist, aber keine Verweise auf das Feld enthält, angenommen wird, dass es vollständig ausgewählt ist (einschließlich aller Felder).
!!!Beachten Sie, dass Sie im Gegensatz zu den anderen Abfragesatzmethoden hier das Zwischenmodell ausschließen, aber die Spalte am Ende beibehalten können, was bei der Analyse der Rohdaten in das Modell keinen Sinn ergibt.
1
2
3
4
5
6
7
8
9
10
11
12
13
14 | So in relation category - > category _ x _ post - > post - > Benutzer können schließen
category _ x _ post and post models but can keep the user one . [ Bearbeiten | Quelltext bearbeiten ]
Kontext , der nicht möglich ist , wie wenn Sie möchten , dass durch und nach Modell
Es gäbe keine Möglichkeit , das Benutzermodell aus der Kategorie des Modells zu ermitteln .
Benutzer : (
Await istRole.objects.select_ related (" Benutzer _ _ categories ")
. filter (Vorname = " admin ")
. fields ({" name " : ... , " users " : {" name " : ... , " categories " :{"name"}}) {" name " : ... , " Benutzer " : {" name " : ... , " categories " :{"name"}}})
. exclude _ fields (" roleuser ") Bearbeiten
Die _ Liste ()
)
assert user = = [ (" admin " , " Anonymous " , " Nachrichten ") ]
|
Wenn die Abfrage mehrere ManyToMany-Modelle enthält , müssen Sie jedes Modell manuell ausschließen .
Um diese Belastung zu vermeiden , bietet ormar den Parameter except \ _ through = False an , der alle Modelle vollständig ausschließt , wenn dieses Flag auf True gesetzt ist .
| # equivalent to query above , note lack of exclude _ fields call # gleichwertig zu above , note lack of exclude _ fields call
Benutzer : (
Await istRole.objects.select_ related (" Benutzer _ _ categories ")
. filter (Vorname = " admin ")
. fields ({" name " : ... , " users " : {" name " : ... , " categories " :{"name"}}) {" name " : ... , " Benutzer " : {" name " : ... , " categories " :{"name"}})
. values _ list (exclude _ through = true) (Hinzufügen)
)
assert user = = [ (" admin " , " Anonymous " , " Nachrichten ") ]
|
Verwenden Sie flatten , um eine Liste der Werte zu erhalten .
| Verwenden Sie Felder mit mehr als ein Feld wird eine Ausnahme auslösen !
await Role . objects . fields ({"name", "id"}) . values _ list (flatten = true) Role . objects . fields ({"name", "id"}) . values _ list (flatten = wahr)
# proper usage für
roles = await Role . objects . fields (" name ") . values _ list (flatten = True)
assert roles ==["admin","Herausgeber"]
|
Die QuerysetProxy Methode
Wenn Sie direkt auf das zugehörige Feld ManyToMany und ReverseForeignKey zugreifen, wird eine Liste der zugehörigen Modelle zurückgegeben.
Gleichzeitig wird jedoch eine Teilmenge der QuerySet-API verfügbar gemacht, sodass Sie relevante Modelle direkt aus dem übergeordneten Modell filtern, erstellen, auswählen usw. können.
!!!Warnung Da die Verwendung von values und values_list das Analysieren und Überprüfen des Modells überspringt, löschen diese beiden Methoden nicht das aktuell geladene relevante Modell im Vergleich zu allen anderen Lesemethoden in querysetproxy und überschreiben das aktuell geladene Modell nicht mit den eigenen Aufrufergebnissen!
Die Werte
Es ist genau die gleiche Funktion wie oben, ermöglicht Ihnen aber, das relevante Objekt vom anderen Ende der Beziehung zu erhalten.
!!!tip Um mehr über QuerysetProxy zu erfahren, besuchen Sie den Abschnitt querysetproxy
Liste der Werte
Es ist genau das gleiche wie die Funktion value_list oben, ermöglicht jedoch die Abfrage oder Erstellung von verwandten Objekten vom anderen Ende der Beziehung.
!!!tip Um mehr über QuerysetProxy zu erfahren, besuchen Sie den Abschnitt querysetproxy