Перейти к содержанию

Удаление данных из базы данных.

Следующие методы позволяют удалить данные из базы данных.

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

  • Модель

    • Метод Model.delete()
    • Агент набора запросов

    • Метод QuerysetProxy.remove ()

    • Метод QuerysetProxy.clear ()

Удалить

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

Удаление уровня QuerySet используется для удаления нескольких записей одновременно.

Для удаления всей таблицы необходимо либо отфильтровать QuerySet, либо ввести флаг each=True.

Если вы не предоставляете этот флаг или фильтр, генерируется QueryDefinitionError.

Возвращает количество удаленных строк.

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

Метод модели

Каждый экземпляр модели имеет набор способов сохранения, обновления или загрузки самого себя.

Удалить

Экземпляр модели можно удалить с помощью метода delete().

!!!tip Подробнее о методе delete() в методах модели

Метод QuerysetProxy

При прямом доступе к соответствующему полю ManyToMany и ReverseForeignKey, возвращайтесь к списку связанных моделей.

Но в то же время он предоставляет подмножество API QuerySet, поэтому вы можете фильтровать, создавать и выбирать связанные модели непосредственно из родительской модели.

Устранение

Соответствующая модель исключена.

Удаление связей в базе данных.

При присвоении флагу keep_reversed значения Falseormar связанная модель также удаляется из базы данных.

 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
Class Album(Ormar):
    ormar_config = base_ormar_config ()

    id: int = ormar.Integer(primary_key =True)
    name: str = ormar.String(max_length =100)
    is_best seller: bool = ormar.Boolean(default=False)

Class Track(Ormar):
    ormar_config = base_ormar_config ()

    id: int = ormar.Integer(primary_key =True)
    Альбом: Optional (Album)= ormar.ForeignKey(альбом)
    title: str = ormar.String(max_length =100)
    position: int = ormar.Integer()
    play_count: int = ormar.Integer(nullable=True)


Альбом (name="Malibu").save()
100 - 100 (
    album=album, title="The Bird", position=1, play_count =30
save()
Remove Through proxy from reverse side of relation
remove(track1, keep_reversed =False)

#track был также удален
Tracks = await Track.objects.all ()
assert len(tracks) = 0

Очистить

Удалите все связанные модели за один вызов.

Также удаляются связи из базы данных.

При присвоении флагу keep_reversed значения Falseormar связанная модель также удаляется из базы данных.

 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
Class Album(Ormar):
    ormar_config = base_ormar_config ()

    id: int = ormar.Integer(primary_key =True)
    name: str = ormar.String(max_length =100)
    is_best_seller: bool = ormar.Boolean(default=False)

Class Track(Ormar):
    ormar_config = base_ormar_config ()

    id: int = ormar.Integer(primary_key =True)
    Альбом: Optional (Album)= ormar.ForeignKey(альбом)
    title: str = ormar.String(max_length =100)
    position: int = ormar.Integer()
    play_count: int = ormar.Integer(nullable=True)


Альбом (name="Malibu").save()
100 - 100 (
    Альбом =album,
    title="The Bird".
    position=1,
    play_count =30,
save()
Рецепт ((
    Альбом =album,
    Оригинальное название: Heart Don't Stand a Chance
    Position=2,
    play_count =20,
save()

# removes the relation Only («Чистые иностранные ключи в треке»)
Альбом: Tracks.clear ()

# Removes And So the Tracks
Album. tracks.clear (keep_reversed =False)