大きなクエリーセットからすべてのオブジェクトを削除しようとしています。ここに私のmodels.pyはDjango 1.10大きなカスケードクエリーセットを削除する
from __future__ import unicode_literals
from django.contrib.auth.models import User
from django.db import models
class Fund(models.Model):
name = models.CharField(max_length=255, blank=False, null=False)
start_date = models.DateField(default=None, blank=False, null=False)
def __unicode__(self):
return self.name
class FundData(models.Model):
fund = models.ForeignKey(Fund, on_delete=models.CASCADE)
date = models.DateField(default=None, blank=False, null=False)
value = models.FloatField(default=None, blank=True, null=True)
def __unicode__(self):
return "{} --- Data: {} --- Value: {} ".format(str(self.fund), str(self.date), str(self.value))
あるしかし、私は、クエリがあまりにも多くの時間とMySQLを取るすべてのレコードを削除しようとすると、タイムアウトしています。
Fund.objects.all().delete()
- ビュー内でこの操作を管理するための最良の方法は何ですか?
- 端末からdjangoコマンドを呼び出す方法がありますか?すべての
私のモデルにはon_delete = models.CASCADEがあります。すべてのファンドの削除関連するすべてのファンドデータ(各ファンドの数千)も削除します。カスケードの保護はありません。 ? – Andrea
私は本当にconnect_timeoutの変更が役立つかどうかは分かりません。 mysqlのドキュメントから: "不正なハンドシェイクで応答する前に、mysqldサーバが接続パケットを待つ秒数。デフォルト値は10秒です。クライアントがMySQLサーバとの接続が失われたというエラーが頻繁に発生した場合は、 「XXX」、「system」にあります。 – Andrea
@アンドレア「カスケードの保護がない」とは、単に削除されないことを意味します。あなたは正確なトレースバックを貼り付けていないので、あなたが持っているタイムアウトを言うのは難しいです。これがhttps://dev.mysql.com/doc/refman/5.7/en/gone-away.htmlに役立つとは思いませんか? – pythad