Aller au contenu

Lire les données de la base de données

La méthode suivante vous permet de charger des données à partir d'une base de données.

  • get(*args, **kwargs) -> modèle

  • 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]

  • Modèle de

    • La méthode Model.load()
    • Query Set Agent pour

    • QuerysetProxy.get(*args, **kwargs) Méthodes

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

obtenir

get(*args, **kwargs) -> Modèle

Obtient la première ligne de la base de données qui répond aux critères de configuration de kwargs.

Si aucune condition n'est définie, elle renvoie la dernière ligne de la base de données triée par colonne pk.

Passer une condition revient en fait à appeler la méthode filter(*args, **kwargs) décrite ci-dessous.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
Classe Track(modèle. ormar):
    ormar_config = ormar.OrmarConfig(
        database=database,
        Metadata=Metadata,
        tablename="track"
    )

    id: int = ormar.Integer(primary_key=True)
    Album: Optional[Album] = ormar.ForeignKey(Album)
    nom: str = ormar.String(max_length=100)
    position: int = ormar.Integer()


track = await Track.objects.get(nom ='The Bird')
# note que ci-dessus est équivalent à await Track.objects.filter(nom ='The Bird').get()
track2 = track = await Track.objects.get()
track == track2
# True since, c'est la seule ligne en db dans notre exemple
# and get without arguments return first row by pk column desc

!!!Une exception NoMatch est levée si aucune ligne ne remplit la condition.

1
S'il y a plusieurs rencontres avec la critique, l'exception `MultipleMatches` est raisonnée.

Acquisition ou non

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

Exactement comme get décrit ci-dessus, mais si aucun enregistrement de base de données correspondant à la condition n'est trouvé, None est renvoyé au lieu de lever une exception.

Obtenir ou créer

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

Créer et obtenir une combinaison de méthodes.

Essayez d'obtenir une ligne qui répond aux critères, et si une exception NoMatch est levée, une nouvelle ligne est créée avec les kwargs et_defaults donnés.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
Classe Album(modèle ormar):
    ormar_config = base_ormar_config.copy(tablename="album")

    id: int = ormar.Integer(primary_key=True)
    name: str = ormar.String(max_length=100)
    année: int = ormar.Integer()


album, created = await Album.objects.get_or_create(nom ='The Cat', _defaults={"year": 1999})
Assert créé est vrai
assert album.name == "Le chat"
assert album.year == 1999
# object est créé comme il ne l'est pas
album 2, created = await Album.objects.get_or_create(nom ='The Cat')
Assert créé est faux
assert album == album 2
# return True as the same db row is returned

!!!Attention Bien qu 'il s'agisse de lignes équivalentes dans la base de données, l'album et l'album 2 dans l'exemple ci-dessus sont 2 objets python différents! La mise à jour de l'un d'eux n'actualisera pas le second tant que vous n'aurez pas chargé explicitement () de nouvelles données de la base de données.

Notez que si vous souhaitez créer un nouvel objet, vous devez soit passer la valeur de la colonne pk, soit la colonne pk doit être réglée sur incrémentation automatique.

Le premier

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

Obtient la première ligne de la base de données, triée par ordre croissant de colonnes de clé primaire.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
Classe Album(modèle ormar):
    ormar_config = base_ormar_config.copy(tablename="album")

    id: int = ormar.Integer(primary_key=True)
    name: str = ormar.String(max_length=100)


await Album. objets.create(nom ='The Cat')
await Album. objets.create(nom ="Le chien")
album = await Album.objects.first()
#première ligne par primary_key column asc
assert album.name =="Le chat"

Tous les

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

Pour les options de filtre définies, renvoie toutes les lignes de la base de données pour un modèle donné.

Passer kwargs est un raccourci qui revient à appeler filter(*args, **kwargs).all().

Si aucune ligne ne remplit les conditions, une liste vide est retournée.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
Classe Album(modèle ormar):
    ormar_config = base_ormar_config.copy(tablename="album")

    id: int = ormar.Integer(primary_key=True)
    name: str = ormar.String(max_length=100)


Classe Track(modèle. ormar):
    ormar_config = base_ormar_config.copy(tablename="track")

    id: int = ormar.Integer(primary_key=True)
    Album: Optional[Album] = ormar.ForeignKey(Album)
    title: str = ormar.String(max_length=100)
    position: int = ormar.Integer()


tracks = await Track.objects.select_related("album").all(album__title ="Sample")
# will return a list of all Tracks for album Sample
#pour plus sur les visites jointes et les sous-sections

tracks = await Track.objects.all()
#retournera une liste de toutes les pistes dans la base de données

itération

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

Renvoie un générateur itérable asynchrone pour toutes les lignes de la base de données d'un modèle donné.

Passer args et/ou kwargs est un raccourci et revient à appeler filter(*args, **kwargs).iterate().

Si aucune ligne ne satisfait aux conditions, un générateur asynchrone vide est retourné.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
Classe Album(modèle ormar):
    ormar_config = base_ormar_config.copy(tablename="album")

    id: int = ormar.Integer(primary_key=True)
    nom: str = ormar.String(max_length=100)


await Album. objets.create(nom ='The Cat')
await Album. objets.create(nom ="Le chien")
# will asynchronously iterate all Album models yielding one main model in a time from the generator
async for album in Album.objects.iterate():
    print(album.name)

#Le chat
#Le chien

!!!avertit que l'utilisation de iterate() entraînera l'ignorance des appels précédents à prefetch_lated(), car ces deux optimisations n'ont pas de sens ensemble.

1
Si `iterate()`&`prefetch_related()` sont utilisés ensemble, l'exception `QueryDefinitionError` est raisonnée.

Approche modèle

Chaque instance de modèle dispose d'un ensemble de méthodes pour sauvegarder, mettre à jour ou se charger.

Chargement de

Vous pouvez charger un modèle lié à ForeignKey en appelant la méthode load().

load() peut être utilisé pour rafraîchir le modèle à partir de la base de données s'il est modifié par un autre processus.

!!!tip En savoir plus sur la méthode load() dans Model Methods

La méthode QuerysetProxy

Lorsque vous accédez directement au champ ManyToMany associé ainsi qu'à la clé ReverseForeignKey, une liste des modèles associés est renvoyée.

Mais en même temps, il expose un sous-ensemble de l'API QuerySet, de sorte que vous pouvez filtrer, créer, sélectionner des modèles pertinents, etc. directement à partir du modèle parent.

obtenir

Fonctionne exactement de la même manière que la fonction get ci-dessus, mais vous permet d'obtenir l'objet pertinent de l'autre côté de la relation.

!!!conseil Pour en savoir plus sur Querysetproxy, visitez la section Querysetproxy

Acquisition ou non

Exactement comme get décrit ci-dessus, mais si aucun enregistrement de base de données correspondant à la condition n'est trouvé, None est renvoyé au lieu de lever une exception.

!!!conseil Pour en savoir plus sur Querysetproxy, visitez la section Querysetproxy

Obtenir ou créer

Exactement comme la fonction get_or_create ci-dessus, mais vous permet d'interroger ou de créer des objets associés de l'autre côté de la relation.

!!!conseil Pour en savoir plus sur Querysetproxy, visitez la section Querysetproxy

Le premier

Exactement comme la première fonction ci-dessus, mais vous permet d'interroger les objets pertinents de l'autre côté de la relation.

!!!conseil Pour en savoir plus sur Querysetproxy, visitez la section Querysetproxy

Tous les

Exactement la même chose que tout ce qui précède, mais vous permet d'interroger les objets pertinents de l'autre côté de la relation.

!!!conseil Pour en savoir plus sur Querysetproxy, visitez la section Querysetproxy