在我的Django应用程序中,我反复在数据库上运行相同的查询(例如,每10秒运行一次)。然后,我在收到的查询集上创建一个MD5和,并将其与上一次运行中创建的MD5和进行比较。如果两者相等,则数据没有更改,并且不需要更新网页。
在执行此操作时,数据库中的数据可能会更改。
但是,显然由于查询缓存,该查询返回相同的查询集。
如何禁用查询缓存并在数据库上显式执行查询?
我遇到了我认为是某种缓存的行为,但事实证明是数据库事务愚弄了我。
我遇到的问题是,在另一个过程中,将项目添加到数据库中,并且我想监视另一个过程的进度,因此我打开了django shell,并发出了以下命令:
>>> MyData.objects.count() 74674 >>> MyData.objects.count() 74674
即使实际上在数据库中,该值也没有改变。我意识到,至少以我在事务中设置MySQL和django的方式,我在打开事务时只会看到数据库的“快照”。
由于在django中使用视图,因此我定义了自动提交行为,因此对于每个视图来说,只查看快照是可以的,因为下次调用视图时,它将处于不同的事务中。但是对于一段不是自动提交的代码,除了在该事务中所做的那些更改之外,它将看不到数据库中的任何更改。
只是想我会把这个答案扔给可能遇到这种情况的任何人。
要解决,请提交你的事务,可以像这样手动完成:
>> from django.db import transaction >> transaction.enter_transaction_management() >> transaction.commit() # Whenever you want to see new data