session = DBSession()
#spot = session.execute("select * from spot where id=1 for update;")
#spot.fetchall()
send_spot = session.query(Spot).filter(
Spot.id == 1).with_for_update().one()
spot.name='qwerdsdfdf'
#session.execute("update spot set name='ccbbbaaaaa' where id=1;")
session.commit()
如上所示,想在更新时加个排它锁,但是执行结果是(1205, u'Lock wait timeout exceeded; try restarting transaction')
通过查询事物和锁的信息,发现会产生 2 个线程 2 个事物,update 语句变成单独一个事物在等待第一条的锁。可是这明明是一个事物,为什么变成 2 个了?
如果把 update 语句用 execute 执行就会正常。求助!
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.