在mysql innodb中使用事務,如果插入或者更新出錯,一定要主動顯式地執行rollback,否則可能產生不必要的鎖而鎖住其他的操作
我們在使用數據庫的時候,可以使用contextlib,這樣異常的時候自動回滾,而且最后都會執行關閉操作
from contextlib import contextmanager engine = create_engine(EREBUS_DB_CONNECT_STRING, echo=True, pool_size=150, max_overflow=50, pool_recycle=300) db_session = scoped_session(sessionmaker(autocommit=False, autoflush=False, bind=engine, expire_on_commit=True)) @contextmanager def session(): try: session = db_session() session.expire_on_commit = False yield session except: session.rollback() finally: session.close()
http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001478651770626de401ff1c0d94f379774cabd842222ff000