【问题标题】:SQL Alchemy rollback two transactionsSQLAlchemy 回滚两个事务
【发布时间】:2018-11-02 00:52:16
【问题描述】:

我正在编写一个 python 脚本来处理一些 csv 数据并将其放入我通过 sqlalchemy 访问的 sqlite db。

目前的计算分为两部分。第二部分取决于数据库中已经存在的第一部分的结果。从头开始重写脚本确实解决了这种依赖关系会很痛苦,我想避免它。

def part_one():
    # does stuff
    session.commit()

def part_two():
    # does stuff, including querying part_one's results
    # sometimes this function fails and rollbacks
    session.commit()

如果part_two 失败,我想回滚part_twopart_one。 由于part_two 依赖于数据库中存在的数据,我想我不得不在part_one 中提交。否则我显然可以重用同一个会话并完全回滚。

我试图搞砸session.begin_nested,但没有得到任何结果。有没有办法实现我想要做的事情?我需要能够 session.query 反对未提交的更改(这似乎不可能)或回滚以前成功提交的事务。

【问题讨论】:

    标签: python sqlite sqlalchemy


    【解决方案1】:

    好吧,我把它弄得比它需要的复杂得多。我正在寻找的显然是session.flush,它在不提交任何内容的情况下执行part_one 的所有插入/更新/删除。

    def part_one():
        # does stuff
        session.flush()
    
    def part_two():
        # does stuff, including querying part_one's results
        # sometimes this function fails and rollbacks
        session.commit()
    

    像魅力一样工作

    【讨论】:

      猜你喜欢
      • 2020-06-02
      • 2016-02-07
      • 1970-01-01
      • 1970-01-01
      • 2012-01-16
      • 1970-01-01
      • 1970-01-01
      • 2015-06-13
      相关资源
      最近更新 更多