Aller au contenu

Supprimer des données de la base de données

La méthode suivante vous permet de supprimer des données de votre base de données.

  • delete(each: bool = False, **kwargs) -> int

  • Modèle de

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

    • QuerysetProxy.remove() Méthode

    • QuerysetProxy.clear() Méthode

Supprimé

delete(each: bool = False, **kwargs) -> int

La suppression de niveau QuerySet est utilisée pour supprimer plusieurs enregistrements à la fois.

Vous devez soit filtrer le QuerySet en premier, soit fournir l'attribut each=True pour supprimer la table entière.

Si vous ne fournissez pas ce drapeau ou ce filtre, une QueryDefinitionError est levée.

Renvoie le nombre de lignes supprimées.

 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
37
38
39
40
41
42
43
44
45
46
47
import asyncio

import databases
import ormar
import sqlalchemy
from examples import create_drop_database

DATABASE_URL = "sqlite:///test.db"

ormar_base_config = ormar.OrmarConfig(
    database=databases.Database(DATABASE_URL),
    metadata=sqlalchemy.MetaData(),
)


class Book(ormar.Model):
    ormar_config = ormar_base_config.copy(tablename="books")

    id: int = ormar.Integer(primary_key=True)
    title: str = ormar.String(max_length=200)
    author: str = ormar.String(max_length=100)
    genre: str = ormar.String(
        max_length=100,
        default="Fiction",
    )


@create_drop_database(base_config=ormar_base_config)
async def run_query():
    await Book.objects.create(
        title="Tom Sawyer", author="Twain, Mark", genre="Adventure"
    )
    await Book.objects.create(
        title="War and Peace in Space", author="Tolstoy, Leo", genre="Fantasy"
    )
    await Book.objects.create(
        title="Anna Karenina", author="Tolstoy, Leo", genre="Fiction"
    )

    # delete accepts kwargs that will be used in filter
    # acting in same way as queryset.filter(**kwargs).delete()
    await Book.objects.delete(genre="Fantasy")  # delete all fantasy books
    all_books = await Book.objects.all()
    assert len(all_books) == 2


asyncio.run(run_query())

Approche modèle

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

Supprimé

Vous pouvez supprimer une instance du modèle en appelant la méthode delete().

!!!tip En savoir plus sur la méthode delete() dans les méthodes modèles

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.

Éliminer

Les modèles concernés sont supprimés un par un.

Supprimer une relation dans une base de données.

Si vous spécifiez l'attribut keep_reversed comme Falseormar, le modèle associé est également supprimé de la base de données.

 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
Classe Album(modèle ormar):
    ormar_config = base_ormar_config.copy()

    id: int = ormar.Integer(primary_key=True)
    name: str = ormar.String(max_length=100)
    is_best_sell: bool = ormar. booléen (default=False)

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

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


album = await Album(nom ="Malibu").save()
track1 = await Track(
    album=album, title="The Bird", position=1, play_count=30,
).save()
# remove through proxy from reverse of relation
await album.tracks.remove(track1, keep_reversed=False)

#La piste était aussi supprimée
tracks = await Track.objects.all()
assert len(tracks) == 0

Clear à

Un seul appel supprime tous les modèles pertinents.

Supprime également les relations dans la base de données.

Si l'attribut keep_reversed est spécifié comme Falseormar, le modèle associé est également supprimé de la base de données.

 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
Classe Album(modèle ormar):
    ormar_config = base_ormar_config.copy()

    id: int = ormar.Integer(primary_key=True)
    nom: str = ormar.String(max_length=100)
    is_best_sell: bool = ormar. booléen (default=False)

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

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


album = await Album(nom ="Malibu").save()
track1 = await Track(
    album=album,
    title="L'oiseau",
    position=1,
    play_count=30,
).save()
track2 = await Track(
    album=album,
    title="Le cœur ne tient pas une chanson",
    position=2,
    play_count=20,
).save()

# removes the relation only -> clears foreign keys on tracks
await album.tracks.clear()

# removes aussi loin que les traces
await album.tracks.clear(keep_reversed=False)