Ga naar inhoud

Gegevens uit de database verwijderen

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

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

  • model

    • Model.delete () methode
    • Query instellen Agent

    • QuerysetProxy.delete () methode

    • QuerysetProxy.clear () methode

verwijderen

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

QuerySet-niveau verwijderen wordt gebruikt om meerdere records tegelijk te verwijderen.

U moet eerst de QuerySet filteren of de vlag each = True opgeven om de hele tabel te verwijderen.

Als u deze vlag of filter niet opgeeft, wordt QueryDefinitionError verhoogd.

Retourneert het aantal rijen dat is verwijderd.

 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())

model werkwijze

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

verwijderen

U kunt een model exemplaar verwijderen door de delete () methode aan te roepen.

!!!Tip Lees meer over de delete () 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.

elimineren

De desbetreffende modellen worden één voor één geschrapt.

Verwijder de relatie in de database.

Door de keep\ _ reversed-vlag als Falseormar op te geven, wordt ook het relevante model uit de database verwijderd.

 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
Klasse Album (ormar. Model):
    ormar _ config = basis _ ormar _ config kopie ()

    Id: int = ormar. Geheel getal (primaire _ sleutel = waar)
    Naam: str = ormar. String (max _ length = 100)
    is _ best _ seller: bool = ormar. Booleaans (standaard = onwaar)

Klasse Track (ormar. Model):
    ormar _ config = basis _ ormar _ config kopie ()

    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 ()
    play _ count: int = ormar. Geheel (nullable = Waar)


Album = wacht op album (naam = "Malibu") .save ()
Track1 = wachten op Track (
    Album = album, title = "The Bird", positie = 1, play _ count = 30,
) .opslaan ()
# verwijderen via proxy van de achterkant van de relatie
Wacht op album.tracks.delete (track1, keep _ reversed = False)

# de track is ook verwijderd
Tracks = wacht op Track.objects.all ()
Stel len (sporen) = = 0

duidelijk

Een enkele oproep verwijdert alle gerelateerde modellen.

Verwijder ook de relatie in de database.

Door de keep\ _ reversed-vlag als Falseormar op te geven, wordt ook het relevante model uit de database verwijderd.

 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
Klasse Album (ormar. Model):
    ormar _ config = basis _ ormar _ config kopie ()

    Id: int = ormar. Geheel getal (primaire _ sleutel = waar)
    Naam: str = ormar. String (max _ length = 100)
    is _ best _ seller: bool = ormar. Booleaans (standaard = onwaar)

Klasse Track (ormar. Model):
    ormar _ config = basis _ ormar _ config kopie ()

    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 ()
    play _ count: int = ormar. Geheel (nullable = Waar)


Album = wacht op album (naam = "Malibu") .save ()
Track1 = wachten op Track (
    Album = album,
    Titel = "De Vogel",
    Positie = 1,
    afspelen _ tellen = 30,
) .opslaan ()
Track2 = wachten op Track (
    Album = album,
    Titel = "Harten maken geen schijn van kans",
    Positie = 2,
    afspelen _ tellen = 20,
) .opslaan ()

# verwijdert alleen de relatie - > wist buitenlandse sleutels op tracks
In afwachting van album.tracks.clear ()

# verwijdert ook de sporen
Wacht op album.tracks.clear (keep _ reversed = False)