码迷,mamicode.com
首页 > 数据库 > 详细

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

时间:2017-06-13 12:44:28      阅读:517      评论:0      收藏:0      [点我收藏+]

标签:ext   err   pre   nbsp   wiki   als   manager   overflow   ring   

在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

 

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

标签:ext   err   pre   nbsp   wiki   als   manager   overflow   ring   

原文地址:http://www.cnblogs.com/shengulong/p/7000219.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!