J'ai rencontré un comportement que je pensais être une sorte de mise en cache, mais il s'est avéré que les transactions de base de données me trompaient.
J'ai eu le problème où dans un autre processus, des éléments ont été ajoutés à la base de données, et je voulais suivre les progrès de l'autre processus, donc j'ai ouvert une coquille de django et a publié ce qui suit:
>>> MyData.objects.count()
74674
>>> MyData.objects.count()
74674
La valeur ne changeait pas, même si elle se trouvait réellement dans la base de données. Je me suis rendu compte qu'au moins avec la façon dont j'avais MySQL & configuration django que j'étais dans une transaction et verrait seulement un "instantané" de la base de données au moment où j'ai ouvert la transaction. Comme avec les vues dans django, j'avais un comportement autocommit défini, c'était bien pour chaque vue de ne voir qu'un snapshot, car la prochaine fois qu'une vue était appelée, elle serait dans une transaction différente. Mais pour un morceau de code qui ne commit pas automatiquement, il ne verrait aucun changement dans la base de données, sauf ceux qui ont été faits dans cette transaction. Je pensais juste que je jetterais cette réponse pour tous ceux qui pourraient venir sur cette situation.
Pour résoudre, fondez votre transaction, qui peut être fait manuellement comme ceci:
>> from django.db import transaction
>> transaction.enter_transaction_management()
>> transaction.commit() # Whenever you want to see new data
double possible de [Comment forcer Django à ignorer les caches et recharger les données?] (Http://stackoverflow.com/questions/3346124/how-do-i-force- django-to-ignore-caches-and-reload-data) –