|  |      1imnpc      2015-08-08 07:36:45 +08:00 Selete 为什么要开启事务呢  一般不是写入重要操作的时候才需要吗 | 
|  |      2msg7086      2015-08-08 08:04:30 +08:00 没写入的话commit和rollback没区别呀,都是释放掉当前上下文。 | 
|      3hdshen      2015-08-08 08:14:36 +08:00 只做查询的时候  不开启事物  有db写入的时候 才开启 | 
|  |      4realpg PRO MySQL么? 第一,无更新操作不开启事务 第二,如果是“可能更新”而开启事务最后因为逻辑直接要结束,应该commit,因为rollback必然要进行一大堆内部逻辑。不过无写入rollback跟commit的开销差距极小, | 
|  |      5sivacohan PRO PostgreSQL的话建议用commit | 
|      8abv OP | 
|  |      9oclock      2015-08-09 22:54:09 +08:00 不是开销问题,select for update之后到底有没有写动作,有的话肯定应该commit。一般可以这样 try: db.session.execute(...) ... db.session.commit() except SQLAlchemy.Error: db.session.rollback() 如果不捕捉异常,常常出现悬空连接idle in trasanction (postgresql),而数据库要过很久才会关闭这些连接 |