sqlalchemy commit 和 flush
先看下对象的状态。总共5个,这里只谈3个。
transitant:刚new出来的对象,没有和session或者orm框架产生关联。
pending:transitant的对象调用add后,就会变为pending,加入了orm框架的监管范围。
persistant:调用flush以后就会变味persistant,也就是被写到了数据库中。
查询官网后,发现:
flush会把更改提交到数据库,commit会默认调用flush,然后标志这个事务的提交,也就是事务执行完毕。如果只调用flush,那么更新虽然可以被写入数据库,但是事务是不完整的,没有提交。由于事务隔离型的存在,可能其他的事务是无法看到这次更新操作的。只有调用了commit,才能被看成是事务完整的执行完毕。
flush会写入数据库,commit会调用flush,并且表示事务结束。