Как ускорить удаление Джанго ()? - PullRequest
1 голос
/ 14 января 2011

Использование MyModel.objects.all (). Delete () может занять много времени. Есть ли способ ускорить процесс?

Предположения:

  • Я хочу удалить все экземпляры MyModel
  • Я также хочу удалить все модели, которые имеют ForeignKey для MyModel
  • Я априори знаю, какие они модели

1 Ответ

3 голосов
/ 14 января 2011

Использование raw sql :

from django.db import connection
cursor = connection.cursor()
cursor.execute("set foreign_key_checks = 0")
cursor.execute("truncate table table_a")
cursor.execute("truncate table table_b")
# ...
cursor.execute("set foreign_key_checks = 1")

Если вы хотите удалить все модели, вы даже можете использовать db для генерации операторов sql:

from django.db import connection
cursor = connection.cursor()
cursor.execute("set foreign_key_checks = 0")
cursor.execute("select concat('truncate table ',table_schema,'.',table_name,';') as sql_stmt from information_schema.tables where table_schema = 'your_schema_name' and table_type = 'base table'")
for sql in [sql[0] for sql in cursor.fetchall()]:
    cursor.execute(sql)
cursor.execute("set foreign_key_checks = 1")

(трюки sql взяты из здесь )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...