相关疑难解决方法(0)

如何强制Django忽略任何缓存并重新加载数据?

我正在使用来自未通过HTTP请求调用的进程的Django数据库模型.该过程应该每隔几秒轮询一次新数据并对其进行一些处理.我有一个循环,睡眠几秒钟,然后从数据库中获取所有未处理的数据.

我所看到的是,在第一次获取后,进程永远不会看到任何新数据.我运行了一些测试,看起来Django正在缓存结果,即使我每次都在构建新的QuerySet.为了验证这一点,我从Python shell中做到了这一点:

>>> MyModel.objects.count()
885
# (Here I added some more data from another process.)
>>> MyModel.objects.count()
885
>>> MyModel.objects.update()
0
>>> MyModel.objects.count()
1025
Run Code Online (Sandbox Code Playgroud)

如您所见,添加新数据不会更改结果计数.但是,调用管理器的update()方法似乎可以解决问题.

我找不到有关该update()方法的任何文档,也不知道它可能做的其他坏事.

我的问题是,为什么我看到这种缓存行为,这与Django文档所说的相矛盾?我该如何防止它发生?

python django caching

74
推荐指数
5
解决办法
4万
查看次数

强制django提交

建立:

  • Python脚本A每15分钟将数据插入数据库
  • Python脚本B每隔几分钟就会从数据库中查询一些最新的条目

两者都使用django的ORM,在同一台机器上运行并使用本地MySQL数据库.

问题:
B获取条目,除了最新的条目,即使A几分钟之前保存它.

我怀疑A没有关闭事务,因此B看到没有最后一个条目的DB.确实在检查MySQL日志时,我注意到commit每个日志都INSERT发生在下一个 日志之前INSERT.

虽然它应该是多余的,但我将@commit_on_success装饰器添加到包含该功能的A功能中save(),但它没有帮助.

我怎么能强迫django(或MySQL ?!)在之后立即提交save()

更新:
我发现提交DO发生-我是误导相信他们不会因为MySQL的通用查询日志只有1秒的分辨率.
鉴于这个和其他新信息,我在这里重新提出这个问题.

mysql django transactions commit

8
推荐指数
1
解决办法
8555
查看次数

标签 统计

django ×2

caching ×1

commit ×1

mysql ×1

python ×1

transactions ×1