データベースからデータを削除する
次の方法では、データベースからデータを削除できます。
削除する
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()メソッドを呼び出すことで、モデルインスタンスを削除できます。
!!!ヒントモデルメソッドのdelete()メソッドの詳細を読む
QuerysetProxyメソッド
関連するManyTomanyフィールドとReverseForeignKeyに直接アクセスする場合は、関連するモデルのリストを返します。
ただし、QuerySet APIのサブセットを公開しているため、親モデルから直接フィルタリング、作成、関連モデルの選択などを行うことができます。
排除する
関連するモデルを1つずつ削除します。
データベースからリレーションシップを削除します。
keep_逆フラグを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. Model):
base_or_config. copy()
id: int=ormar.Integer(プライマリキー=True)
name: str=ormar.String(max_length=100)
is_best_セラー: bool=ormar.Boolean(デフォルト=False)
class Track(ormar. Model):
base_or_config. copy()
id: int=ormar.Integer(プライマリキー=True)
アルバム:オプション[Album]=ormar. ForeignKey(Album)
title: str=ormar.String(max_length=100)
位置: int=ormar.Integer()
play_count: int=ormar.Integer(nullable=True)
アルバム=awaitアルバム(name="Malibu"). save()
track 1=awaitトラック(
アルバム=アルバム、タイトル=「鳥」、ポジション=1、プレイカウント=30、
). save()
#関係の裏側からプロキシを介して削除する
awaitアルバム. tracks.remove(track 1,keep_反転=False)
#トラックも削除されましました。
tracks=await Track. object.all()
トラックの長さ==0
|
クリア
関連するすべてのモデルを1回の呼び出しで削除します。
データベース内のリレーションシップも削除します。
keep_逆フラグを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. Model):
base_or_config. copy()
id: int=ormar.Integer(プライマリキー=True)
name: str=ormar.String(max_length=100)
is_best_セラー: bool=ormar.Boolean(デフォルト=False)
class Track(ormar. Model):
base_or_config. copy()
id: int=ormar.Integer(プライマリキー=True)
アルバム:オプション[Album]=ormar. ForeignKey(Album)
title: str=ormar.String(max_length=100)
位置: int=ormar.Integer()
play_count: int=ormar.Integer(nullable=True)
アルバム=awaitアルバム(name="Malibu"). save()
track 1=awaitトラック(
アルバム=アルバム,
タイトルは「The Bird」。
位置=1、
play_count=30、
). save()
track 2=awaitトラック(
アルバム=アルバム,
タイトルは「Heart Don't Stand a Chance」。
位置=2、
play_count=20,
). save()
#リレーションのみを削除->トラック上の外部キーをクリア
awaitアルバム.トラック.クリア()
#トラックも削除
awaitアルバム. tracks.clear(keep_反転=False)
|