gpt4 book ai didi

mysql - 强制 Django 提交

转载 作者:可可西里 更新时间:2023-11-01 06:32:47 25 4
gpt4 key购买 nike

设置:

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

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

问题:
B 获取条目(最新条目除外),即使 A分钟 之前将其保存。

我怀疑 A 没有关闭事务,因此 B 看到数据库没有最后一个条目。事实上,在检查 MySQL 日志时,我注意到每个 INSERTcommit 发生在 next INSERT 之前。

尽管它应该是多余的,但我向包含 save()A 函数添加了 @commit_on_success 装饰器,但它没有帮助。

如何强制 Django(或 MySQL?!)在 save() 之后立即提交?

更新:
我发现提交 DO 发生了——我误以为他们没有发生,因为 MySQL's General Query Log only has 1 sec resolution .
鉴于此和其他新信息,我重新提出了问题 here .

最佳答案

您可以使用 commit_manually 装饰器并在需要时调用它。

直接来自 documentation :

from django.db import transaction

@transaction.commit_manually
def viewfunc(request):
...
# You can commit/rollback however and whenever you want
transaction.commit()
...

# But you've got to remember to do it yourself!
try:
...
except:
transaction.rollback()
else:
transaction.commit()

这回答了你的问题,但我想知道是否还有其他原因。

注意:commit_manually1.6 中已弃用并在 1.8 中删除.

关于mysql - 强制 Django 提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7025259/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com