Python3 - 'Lock wait timeout exceeded; try restarting transaction' and only process on the database Python3 - '锁等待超时; 尝试重新启动事务' 只有数据库上的进程

6

使用Python一直会出现

(1205, 'Lock wait timeout exceeded; try restarting transaction')

每当我尝试向特定的表中插入数据时,就会出现错误。然而,当我直接从MySQL控制台插入数据时,它却可以正常工作。正在研究中。
SHOW FULL PROCESSLIST

数据库中没有其他活动查询。由于这是一个没有连接到实时应用程序的开发数据库,我无法想象任何问题。但是,它正在由托管我们生产数据库的服务器提供服务,因此如果可能的话,我强烈不建议进行重置。有关如何调试此问题的任何建议?

注意 如果我使用SHOW FULL PROCESSLIST 查看针对数据库运行的查询,最终会失败并出现上述消息,然后手动从MySQL控制台插入它,它将按预期工作。

编辑 以下是查询示例:

INSERT INTO deals (user_ID, store_ID, storeChain_ID, title, dealSaving, 
dealDisclaimer, restriction, dealImage, dealURL, submit_ID, userProvider_ID, 
createDate, createDateTime, expirationDate, expirationDateTime, ZIP, STATE, 
city, businessType, DealType_ID, IP, rating, popular, dealSearchData, tag, 
submitName, provider_dealID)
VALUES (NULL,
        2651049,
        NULL,
        'Toronto East Community Arts Program',
        'Three-Week Photography Workshop',
        NULL,
        NULL,
        'https://a1.image.net/imgs/8423535b-bd3b-4e1e-afee-ab2869970a4c/700_q60.jpg',
        'https://www.exmples.com/deals/1336374',
        111,
        1,
        '2015-11-12',
        '2015-11-12 10:01:58.282826',
        '2015-11-17 09:59:59',
        '2015-11-17 23:59:00',
        'M4M 1K7',
        'ON',
        'Toronto',
        NULL,
        '1',
        '127.0.0.1',
        0,
        144565,
        'Three-Week Photography Workshop',
        'Photography Class',
        'Partner',
        1336374)

编辑 使用建议的示例如下:

self.DB['master']['cursor'].execute("SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED")
self.DB['master']['con'].commit()
self.DB['master']['cursor'].execute(dealsquery,data)
self.DB['master']['con'].commit()

你能展示一下你的Python查询吗? - Busturdust
我添加了一个示例查询。 - user2694306
你是否使用多线程工作? - Sony Mathew
不,它是单线程的。 - user2694306
2个回答

5
原来,另一个组件建立了连接,但没有执行commit()语句。

0

我相信MySql使用“可重复读”隔离级别,这将在整个事务期间(即直到提交,我认为)保持锁定。尝试使用不同的隔离级别,如“读取已提交”。

在Python MySQL中设置已提交读取类似于

cur = conn.cursor() cur.execute("SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED")

编辑:关于隔离级别的良好入门资源 http://vladmihalcea.com/a-beginners-guide-to-database-locking-and-the-lost-update-phenomena/


我尝试在实际插入语句之前添加这个,但问题仍然存在。 - user2694306
你在插入之前提交了更改吗?此外,在继续之前,你是否已经提交了插入操作? - Busturdust
是的,每次插入操作之后都会执行提交操作,并且我还尝试在插入操作之前提交语句。我在原始问题中添加了一个示例。 - user2694306
看一眼这里,也许可以帮到你 https://dev59.com/BW025IYBdhLWcg3wtofX - Busturdust
我注意到我的代码中有一个错误,请尝试使用已提交的而不是未提交的。 - Busturdust

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接