强制django提交

Jon*_*han 8 mysql django transactions commit

建立:

  • 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秒的分辨率.
鉴于这个和其他新信息,我在这里重新提出这个问题.

eri*_*ric 10

您可以使用commit_manually装饰器并随时调用它.

直接来自文档:

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()
Run Code Online (Sandbox Code Playgroud)

这回答了你的问题,不过我想知道是否还有其他工作要做.