flask框架项目mysql报错:1205, ‘Lock wait timeout exceeded; try restarting transaction‘【已解决】

版本:

mysql5.7.39

问题:

flask项目在编辑报错后,导致mysql发生行锁定,无法查询对应的表数据。

错误信息如下:

sqlalchemy.exc.OperationalError: (raised as a result of Query-invoked autoflush; consider using a session.no_autoflush block if this flush is occurring prematurely) (pymysql.err.OperationalError) (1205, 'Lock wait timeout exceeded; try restarting transaction') [SQL: 'UPDATE video SET create_time=%(create_time)s, frame_audit_time=%(frame_audit_time)s, detect_date=%(detect_date)s WHERE video.id = %(video_id)s'] [parameters: {'create_time': '2022-08-31 09:35:01', 'frame_audit_time': '2022-08-31 10:43:04', 'detect_date': '2022-08-31 10:44:57', 'video_id': '16619132725566782'}]

sqlalchemy.exc.OperationalError: (raised as a result of Query-invoked autoflush; consider using a session.no_autoflush block if this flush is occurring prematurely) (pymysql.err.OperationalError) (1205, 'Lock wait timeout exceeded; try restarting transaction') [SQL: 'UPDATE video SET create_time=%(create_time)s, frame_audit_time=%(frame_audit_time)s, detect_date=%(detect_date)s WHERE video.id = %(video_id)s'] [parameters: {'create_time': '2022-08-31 09:35:01', 'frame_audit_time': '2022-08-31 10:43:04', 'detect_date': '2022-08-31 10:44:57', 'video_id': '16619132725566782'}]

必须重启服务, 才可以正常访问列表页面。

 

 show processlist

 

原因:

锁等待超时,Mysql的 InnoDB存储引擎是支持事务的,事务开启后没有被主动Commit。导致该资源被长期占用,其他事务在抢占该资源时,因上一个事务的锁而导致抢占失败!因此出现 Lock wait timeout exceeded 

解决方法:

db = SQLAlchemy(query_class=Query, session_options={'autocommit': True})

后续:

用上面方法解决上面问题后,又引入了新的问题。

处理方法:

 mysql+pymysql://user:password@100.0.40.22:3306/pipeline_monitor_new?charset=utf8&autocommit=true

既解决了异常时,数据库行死锁的问题,又解决了增删改数据对事务的要求。

主要修改两个地方:

db = SQLAlchemy(query_class=Query)

SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://user:password@100.0.40.22:3306/pipeline_monitor_new?charset=utf8&autocommit=true'

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
asyncmy.errors.OperationalError: (1205, 'Lock wait timeout exceeded; try restarting transaction')是一个数据库误,提示了锁等待超时的问题。这个误通常发生在使用事务的时候,如果一个事务在占用某个资源的时候没有主动提交,其他事务在抢占该资源时就会因为上一个事务的锁而导致抢占失败,从而导致超时误。解决这个问题的方法是尝试重新启动事务,或者检查是否有其他会话占用资源并解决该会话的问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [存库 (1205, 'Lock wait timeout exceeded; try restarting transaction')](https://blog.csdn.net/qq_36853469/article/details/88868328)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [flask框架项目mysql:1205, ‘Lock wait timeout exceededtry restarting transaction‘【已解决】](https://blog.csdn.net/shanxiderenheni/article/details/126627800)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值