【问题标题】:SQLAlchemy autocommiting?SQLAlchemy 自动提交?
【发布时间】:2010-03-12 20:47:13
【问题描述】:

我对 SQLAlchemy 显然存在问题。我的代码的粗略草图:

trans = self.conn.begin()
try:            
    assert not self.conn.execute(my_obj.__table__.select(my_obj.id == id)).first()
    self.conn.execute(my_obj.__table__.insert().values(id=id))
    assert not self.conn.execute(my_obj.__table__.select(my_obj.id == id)).first()
except:
    trans.rollback()
    raise

我不提交,第二个断言总是失败!换句话说,即使代码在事务中,数据似乎也被插入到数据库中!这个评估准确吗?

【问题讨论】:

    标签: python transactions sqlalchemy


    【解决方案1】:

    你说得对,更改并没有提交到 DB。但是当您执行查询时,它们会被 SQLAlchemy 自动刷新,在您的情况下,刷新是在带有断言的行上执行的。因此,如果您不明确调用commit,您将永远不会在真实数据中看到数据库中的这些变化。但是,只要您使用相同的 conn 对象,您就会将它们取回。

    您可以将autoflush=False 传递给会话构造函数以禁用此行为。

    【讨论】:

      猜你喜欢
      • 2014-10-01
      • 2016-02-16
      • 1970-01-01
      • 1970-01-01
      • 2020-11-18
      • 2010-10-11
      • 2020-01-29
      • 1970-01-01
      • 2016-09-15
      相关资源
      最近更新 更多