Python 刷新删除后的sqlalchemy查询

Python 刷新删除后的sqlalchemy查询,python,sqlalchemy,Python,Sqlalchemy,鉴于这段代码: record = session.query(Foo).filter(Foo.id == 1).first() session.delete(record) session.flush() has_record = session.query(Foo).filter(Foo.id == 1).first() 我认为“has_record”在这里应该是空的,但它与record是同一行 我是否错过了一些东西来获得假定的结果。或者是否有任何方法可以使删除生效而不提交 在类似的过

鉴于这段代码:

record = session.query(Foo).filter(Foo.id == 1).first()   
session.delete(record)
session.flush()
has_record = session.query(Foo).filter(Foo.id == 1).first()
我认为“has_record”在这里应该是空的,但它与record是同一行

我是否错过了一些东西来获得假定的结果。或者是否有任何方法可以使删除生效而不提交

在类似的过程中,Mysql将以不同的方式运行

start transaction;
select * from Foo where id = 1;  # Hit one record
delete from Foo where id = 1;    # Nothing goes to the disk
select * from Foo where id = 1;  # Empty set
commit;                          # Everything geos to the disk

我犯了个愚蠢的错误。我使用的会话是一个路由会话,它后面有一个主/从会话。事实可能是删除被刷新到master,而查询仍然转到slave,因此我当然可以再次查询记录。

一定要阅读这个精彩的答案:(同时检查zzzeek的评论)我已经读过了,它说“flush将把删除通知db,当我再次查询时,结果将合并db的数据和事务中的flush数据“这意味着‘has_record’应该是无的,对吗?我不确定我是否错过了什么,真的很困惑。嗯,问题是flush没有提交事务,所以数据还没有保存到磁盘。当您运行第二个查询时,您再次访问数据库,因此数据还不存在,这是我的理解。嗯..请检查“在数据库收到当前事务的提交(这是session.COMMIT()所做的)之前,更改不会永久保留到磁盘,也不会对其他事务可见。”,delete和AFTER查询在同一事务中。您正在运行哪个数据库?我需要模拟一下