0

データベース内の私のテーブルのいくつかは、Django の外部のいくつかの python スクリプトによって定期的に更新されます。その結果、Django のビューはデータベース内の最新のデータを認識せず、古いデータを表示しています。私はオンラインで多くの提案を試みましたが、モデルを使用する前に connection.close() を呼び出す以外は何も機能しません。

ここに私が試したアプローチがありますが、何もうまくいきませんでした。

from django.views.decorators.cache import never_cache

@never_cache # <=====
def GetData(request):
    data = Table.objects.get(id=1) # Still giving outdated data

    template = loader.get_template('data/data.html')
    context = Context({
        'lp': lp,
    })
    return HttpResponse(template.render(context))

data = Data.objects.get(id=1)
data = data.objects.get(id=data.id) # data is still old

from django.core.cache import cache
cache.clear()

機能するアプローチ。:

from django.db import connection
def GetData(request):
    # Add this before accessing the model.
    # This also connection.close() prevents the 
    # MySQL 2006, 'MySQL server has gone away' error.
    connection.close()

    data = Table.objects.get(id=1) # Giving outdated data

    template = loader.get_template('data/data.html')
    context = Context({
        'lp': lp,
    })
    return HttpResponse(template.render(context))
4

1 に答える 1

2

「transaction-isolation = READ-COMMITTED」を my.cnf に追加します。詳細はこちら: Django にキャッシュを無視させてデータをリロードさせるにはどうすればよいですか?

于 2013-04-05T05:00:37.517 に答える