Ga naar inhoud

Gegevens uit database lezen

Met de volgende methoden kunt u gegevens uit de database laden.

  • Krijgen (*Args,*\ * kwargs) - > model

  • get_or_create(_defaults: Optional[Dict[str, Any]] = None, *args, **kwargs) -> Tuple[Model, bool]

  • first(*args, **kwargs) -> Model

  • all(*args, **kwargs) -> List[Optional[Model]]

  • iterate(*args, **kwargs) -> AsyncGenerator[Model]

  • model

    • Model.load () methode
    • Query instellen Agent

    • QuerysetProxy.get(*args, **kwargs) werkwijze

    • QuerysetProxy.get_or_create(_defaults: Optional[Dict[str, Any]] = None, *args, **kwargs) werkwijze
    • QuerysetProxy.first(*args, **kwargs) werkwijze
    • QuerysetProxy.all(*args, **kwargs) werkwijze

krijgen

Krijg (*args,*\ * kwargs) - > model

Haalt de eerste rij uit de database die voldoet aan de door kwargs ingestelde voorwaarden.

Als er geen voorwaarden zijn ingesteld, retourneert het de laatste rij in de database gesorteerd op kolom pk.

Het passeren van een voorwaarde roept eigenlijk de hieronder beschreven filtermethode (*args,*\ * kwargs) aan.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
Klasse Track (ormar. Model):
    ormar _ config = ormar. OrmarConfig (
        Database = databank,
        metagegevens = metagegevens;
        Tafelnaam = "track"
    )

    Id: int = ormar. Geheel getal (primaire _ sleutel = waar)
    Album: Optioneel [Album] = ormar. ForeignKey (Album)
    Naam: str = ormar. String (max _ length = 100)
    Positie: int = ormar. Geheel ()


Track = await Track.objects.get (naam = 'De Vogel')
# Merk op dat bovenstaande gelijk is aan wachten Track.objects.filter (name = 'The Bird') .get ()
Track2 = track = wacht op Track.objects.get ()
Spoor = = spoor2
# Waar omdat het de enige rij in db is in ons voorbeeld
# en krijg zonder argumenten retourneer de eerste rij door pk kolom desc

!!!Waarschuwing, als er geen rijen aan de voorwaarde voldoen, wordt er een NoMatch-uitzondering gegenereerd.

1
Als er meerdere rijen zijn die aan de criteria voldoen, wordt de `MultipleMatches`-uitzondering verhoogd.

Krijgen of niks

get_or_none(*args, **kwargs) -> Model

Dit is precies hetzelfde als de hierboven beschreven get, maar als er geen databaserecords worden gevonden die aan de criteria voldoen, wordt None geretourneerd in plaats van dat er een uitzondering wordt gegenereerd.

Verwerven of creëren

get_or_create(_defaults: Optional[Dict[str, Any]] = None, *args, **kwargs) -> Tuple[Model, bool]

Maak en verkrijg een combinatie van methoden.

Pogingen om rijen te krijgen die aan de criteria voldoen, en als er een NoMatch-uitzondering wordt gegenereerd, wordt er een nieuwe rij gemaakt met de gegeven kwargs en\ _ defaults.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
Klasse Album (ormar. Model):
    ormar _ config = basis _ ormar _ config (tabelnaam = "album")

    Id: int = ormar. Geheel getal (primaire _ sleutel = waar)
    Naam: str = ormar. String (max _ length = 100)
    Jaar: int = ormar. Geheel ()


Album, aangemaakt = afwachten Album.objects.get _ or _ create (naam = 'De kat', _ defaults ={"year": 1999})
Assert gemaakt is Waar
Beweren album.name = = "De Kat"
Beweerd albumjaar = = 1999
# object wordt gemaakt omdat het niet bestaat
Album2, aangemaakt = afwachten Album.objects.get _ or _ create (naam = 'De Kat')
Aangemaakt beweren is vals
Album bevestigen = = album2
# return Waar als dezelfde db-rij wordt geretourneerd

!!!waarschuwing Album en album2 in het bovenstaande voorbeeld zijn 2 verschillende Python-objecten, ondanks dat het equivalente rijen in de database zijn! Het bijwerken van een van hen zal de tweede niet vernieuwen totdat u expliciet () nieuwe gegevens uit de database laadt.

Merk op dat als u een nieuw object wilt maken, u de pk-kolomwaarde moet doorgeven of dat de pk-kolom moet worden ingesteld op automatisch verhogen

eerste

first(*args, **kwargs) -> Model

Haalt de eerste rij op in oplopende volgorde gesorteerd op primaire sleutelkolom uit de database.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
Klasse Album (ormar. Model):
    ormar _ config = basis _ ormar _ config (tabelnaam = "album")

    Id: int = ormar. Geheel getal (primaire _ sleutel = waar)
    Naam: str = ormar. String (max _ length = 100)


In afwachting van Album.objects.create (naam = 'The Cat')
In afwachting van Album.objects.create (naam = 'De Hond')
Album = wacht op Album.objects.first ()
# eerste rij door primaire _ sleutelkolom asc
Beweren album.name = = 'De Kat'

allemaal

all(*args, **kwargs) -> List[Optional["Model"]]

Voor de ingestelde filteroptie retourneert u alle rijen in de database voor het gegeven model.

Het doorgeven van kwargs is een snelkoppeling die gelijk staat aan het aanroepen van filter (*args,*\ * kwargs) .all ().

Als er geen rijen zijn die aan de voorwaarde voldoen, wordt een lege lijst geretourneerd.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
Klasse Album (ormar. Model):
    ormar _ config = basis _ ormar _ config (tabelnaam = "album")

    Id: int = ormar. Geheel getal (primaire _ sleutel = waar)
    Naam: str = ormar. String (max _ length = 100)


Klasse Track (ormar. Model):
    ormar _ config = basis _ ormar _ config (tabelnaam = "track")

    Id: int = ormar. Geheel getal (primaire _ sleutel = waar)
    Album: Optioneel [Album] = ormar. ForeignKey (Album)
    Titel: str = ormar. String (max _ length = 100)
    Positie: int = ormar. Geheel ()


Tracks = afwachten Track.objects.select _ gerelateerd ("album") .all (album _ _ title = 'Voorbeeld')
# retourneert een lijst met alle tracks voor album Sample
# voor meer informatie over join bezoek join en subqueries sectie

Tracks = wacht op Track.objects.all ()
# retourneert een lijst van alle Tracks in de database

iteratie

iterate(*args, **kwargs) -> AsyncGenerator["Model"]

Retourneert een asynchrone itereerbare generator voor alle rijen in de database voor een bepaald model.

Het passeren van args en / of kwargs is een snelkoppeling die gelijk staat aan het aanroepen van filter(*args, **kwargs).iterate().

Als er geen rijen zijn die aan de voorwaarde voldoen, wordt een lege asynchrone generator geretourneerd.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
Klasse Album (ormar. Model):
    ormar _ config = basis _ ormar _ config (tabelnaam = "album")

    Id: int = ormar. Geheel getal (primaire _ sleutel = waar)
    Naam: str = ormar. String (max _ length = 100)


In afwachting van Album.objects.create (naam = 'The Cat')
In afwachting van Album.objects.create (naam = 'De Hond')
# zal asynchroon alle Album-modellen herhalen, wat één hoofdmodel tegelijk oplevert van de generator
Async voor albums in Album.objects.iterate ():
    Afdrukken (album.name)

# De Kat
# De Hond

!!!waarschuwt dat het gebruik van iterate () ervoor zorgt dat de vorige aanroep van prefetch\ _ lated () genegeerd wordt; het heeft geen zin om de twee optimalisaties samen te voegen.

1
Als `iterate()`&`prefetch_related()` samen worden gebruikt, wordt de `QueryDefinitionError`-uitzondering verhoogd.

model werkwijze

Elk modelexemplaar heeft een set methoden om zichzelf op te slaan, bij te werken of te laden.

lading

U kunt een ForeignKey-gerelateerd model laden door de load () -methode aan te roepen.

Load () kan worden gebruikt om het model uit de database te vernieuwen als het door een ander proces is gewijzigd.

!!!Tip Lees meer over de load () methode in de modelmethode

QuerysetProxy methode

Wanneer u rechtstreeks toegang krijgt tot de relevante ManyToMany-velden en ReverseForeignKey, wordt een lijst met gerelateerde modellen geretourneerd.

Maar het toont ook een subset van de QuerySet API, zodat u rechtstreeks vanuit het bovenliggende model kunt filteren, maken, gerelateerde modellen kunt selecteren, enz.

krijgen

Het werkingsprincipe is precies hetzelfde als de get-functie hierboven, maar het stelt je in staat om gerelateerde objecten uit het andere uiteinde van de relatie op te halen.

Ga

Krijgen of niks

Dit is precies hetzelfde als de hierboven beschreven get, maar als er geen databaserecords worden gevonden die aan de criteria voldoen, wordt None geretourneerd in plaats van dat er een uitzondering wordt gegenereerd.

Ga

Verwerven of creëren

Precies hetzelfde als de functie get\ _ or\ _ create hierboven, maar u kunt gerelateerde objecten opvragen of maken vanaf het andere uiteinde van de relatie.

Ga

eerste

Het is identiek aan de eerste functie hierboven, maar stelt u in staat gerelateerde objecten uit het andere uiteinde van de relatie te bevragen.

Ga

allemaal

Dezelfde functionaliteit als al het bovenstaande, maar u kunt gerelateerde objecten van het andere uiteinde van de relatie opvragen.

Ga