Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python MySQL中的一行不会改变,即使我在MySQL中更新了它_Python_Mysql_Database_Django - Fatal编程技术网

Python MySQL中的一行不会改变,即使我在MySQL中更新了它

Python MySQL中的一行不会改变,即使我在MySQL中更新了它,python,mysql,database,django,Python,Mysql,Database,Django,出于某种原因,即使我在表中更新了next_detaci_at,这个detaci.objects.filter查询似乎被缓存了,当我打印next_detaci_at时,它似乎没有改变!每次都是一样的 当我重新启动脚本时,它似乎已经改变,print语句也改变了。但当我让它再次运行时,它会一遍又一遍地打印相同的内容。是否while循环正在缓存结果集?了解Django的相关信息。QuerySet缓存结果。引述: 在新创建的QuerySet中,缓存为空。第一次计算QuerySet时——因此,发生数据库查询

出于某种原因,即使我在表中更新了next_detaci_at,这个detaci.objects.filter查询似乎被缓存了,当我打印next_detaci_at时,它似乎没有改变!每次都是一样的


当我重新启动脚本时,它似乎已经改变,print语句也改变了。但当我让它再次运行时,它会一遍又一遍地打印相同的内容。是否while循环正在缓存结果集?

了解Django的相关信息。

QuerySet缓存结果。引述:

在新创建的QuerySet中,缓存为空。第一次计算QuerySet时——因此,发生数据库查询时——Django将查询结果保存在QuerySet的缓存中,并返回显式请求的结果,例如,如果对QuerySet进行迭代,则返回下一个元素。查询集的后续求值将重用缓存的结果

results = Decay.objects.filter(next_decay_at__lte=datetime.datetime.now())
for r in results.iterator():
    print r.next_decay_at
将代码更改为以下内容:

if __name__ == "__main__":
    while True:
        results = None
        results = Decay.objects.filter(next_decay_at__lte=datetime.datetime.now())
        for r in results:
            print r.next_decay_at

        time.sleep(10)
或使用方法:


你看到的行为与QuerySet无关。它与事务管理有关。当您的请求或脚本启动时,Django会打开一个事务,在该事务提交或回滚之前,它不会获得其他事务中间歇性发生的任何内容

如果您提交事务并再次运行该代码块,您应该会得到更新的结果

results = Decay.objects.filter(next_decay_at__lte=datetime.datetime.now())
for r in results.iterator():
    print r.next_decay_at

我在Mysql中查询它,从中选择下一个值。。。它改变了!!!但不是在这个脚本期间。它不断重复打印相同的内容,直到我重新启动脚本。ok。读一下。我不做手动提交或其他任何事情。这只是一个基本的。保存。另一个脚本每隔一段时间就会这样做。为了未来搜索者的利益:这不是正确的答案。OP发布的代码中没有任何内容会导致缓存,将datetime.now的计算移动到单独的变量不会改变任何内容。我不同意。在OP中,代码记录缓存在内部QuerySet缓存中,而不是由django.core.cache缓存。请阅读我链接到的文档。我已移出datatime以保留代码功能,例如仅初始化一次日期。
from django.db import transaction
transaction.commit()