Djangoを使用してテーブル内のすべてのデータを削除する方法


113

2つの質問があります。

  1. Djangoでテーブルを削除するにはどうすればよいですか?
  2. テーブル内のすべてのデータを削除するにはどうすればよいですか?

これは私のコードですが、成功していません:

Reporter.objects.delete()

回答:


139

マネージャーの内部:

def delete_everything(self):
    Reporter.objects.all().delete()

def drop_table(self):
    cursor = connection.cursor()
    table_name = self.model._meta.db_table
    sql = "DROP TABLE %s;" % (table_name, )
    cursor.execute(sql)

3
また、delete_everything()メソッドを使用している場合は、このバグに注意してください:code.djangoproject.com/ticket/16426
David Planella

1
これは最初の質問に答えますが、2番目の質問は処理しません。私はそのために使用'DELETE FROM %s' % (table_name, )し、テーブルを空のままにしますが、そのままにします。
user3934630 2015

93

最新のドキュメントによると、呼び出す正しいメソッドは次のとおりです。

Reporter.objects.all().delete()

3
はい。ただし、テーブルに多くのレコードがある場合、これは強制終了されます。したがって、MyTable.objects.all()。iterator()のxの場合:x.delete()
max

2
@maxただし、これを使用すると、インスタンスのdeleteメソッドが呼び出されdeleteますが、QuerySetそれを呼び出すと呼び出されません。
alxs

19

すべてのテーブルからすべてのデータを削除する場合は、コマンドを試してくださいpython manage.py flush。これにより、テーブル内のすべてのデータが削除されますが、テーブル自体は引き続き存在します。

詳細はこちら:https : //docs.djangoproject.com/en/1.8/ref/django-admin/


19
それはあなたのスーパーユーザーも削除することを言及するのに役立つでしょう
Aurielle Perlmann

15
彼は「すべてのテーブルのすべてのデータ」と言っていましたが、これは非常に破壊的な操作であることを示しているはずです。
ジョーダン

6

シェルを使用して、

1)テーブルを削除する場合:

python manage.py dbshell
>> DROP TABLE {app_name}_{model_name}

2)テーブルからすべてのデータを削除する場合:

python manage.py shell
>> from {app_name}.models import {model_name}
>> {model_name}.objects.all().delete()

4

Django 1.11はデータベーステーブルからすべてのオブジェクトを削除します-

Entry.objects.all().delete()  ## Entry being Model Name. 

以下の引用されている公式Djangoドキュメントを参照して ください-https://docs.djangoproject.com/en/1.11/topics/db/queries/#deleting-objects

delete()は、Manager自体に公開されていない唯一のQuerySetメソッドであることに注意してください。これは、誤ってEntry.objects.delete()をリクエストしてすべてのエントリを削除するのを防ぐための安全メカニズムです。すべてのオブジェクトを削除する場合は、完全なクエリセットを明示的に要求する必要があります。

私自身は以下のコードスニペットを私の中で試しました somefilename.py

    # for deleting model objects
    from django.db import connection
    def del_model_4(self):
        with connection.schema_editor() as schema_editor:
            schema_editor.delete_model(model_4)

私の中にviews.py私は単にhtmlページをレンダリングするビューを持っています...

  def data_del_4(request):
      obj = calc_2() ## 
      obj.del_model_4()
      return render(request, 'dc_dash/data_del_4.html') ## 

-model == model_4からのすべてのエントリの削除が終了しましたが、model_4のすべてのオブジェクトが削除されたことを確認しようとすると、管理コンソール内にエラー画面が表示されます...

ProgrammingError at /admin/dc_dash/model_4/
relation "dc_dash_model_4" does not exist
LINE 1: SELECT COUNT(*) AS "__count" FROM "dc_dash_model_4" 

それを考慮してください-ADMIN Consoleに移動せずに、モデルのオブジェクトを確認してみてください-すでに削除されています-Djangoアプリは意図したとおりに機能します。

ジャンゴ管理画面キャプチャ


1

いくつかの方法があります:

直接削除するには:

SomeModel.objects.filter(id=id).delete()

インスタンスから削除するには:

instance1 = SomeModel.objects.get(id=id)
instance1.delete()

//同じ名前を使用しない

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.