У меня была эта проблема с кешем базы данных SQLite - метод clear()
не очищает кеш, хотя он отлично работает с кешем базы данных MySQL.Похоже, что кэш SQLite нуждается в вызове django.db.transation.commit_unless_managed()
после запуска оператора DELETE from [table]
.
Я использовал несколько кешей, поскольку до того, как официальная поддержка была добавлена в ядро как часть 1.3, у меня естьОбертка вокруг нескольких вызовов кеша - включая clear()
- так что я смог переопределить этот метод и включить commit_unless_managed()
.Я думаю, что я должен, вероятно, регистрировать это как ошибку.
Вот схема кода, который я использую для очистки кэша memcache (кеш по умолчанию в django.core.cache
) и кеш базы данных, хранящийся в cache_table
базы данных settings.DATABASES['cache_database']
.
from django.db import connections, transaction
from django.core.cache import cache # This is the memcache cache.
def flush():
# This works as advertised on the memcached cache:
cache.clear()
# This manually purges the SQLite cache:
cursor = connections['cache_database'].cursor()
cursor.execute('DELETE FROM cache_table')
transaction.commit_unless_managed(using='cache_database')
Вместо того, чтобы быть ленивым и жестко кодировать его, как у меня, должно быть довольно легко получить значения из settings.CACHES
и django.db.router
.