InternalError: (pymysql.err.InternalError) (1205, u'Lock wait timeout exceeded; try restarting transaction')


在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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM