我使用 pyTelegramBotAPI + python 3.7.6 库(Windows 10)。我写了相当大的代码,它有大量的 sql 查询。sql查询没有及时执行时出现该错误。我尝试在每次请求后打开/关闭光标,但这只是部分解决了我的问题。如何在代码中实现,让 sql 查询始终在用户采取任何行动之前完成,即添加某种显式等待?我将在代码中给出一个示例。
由于一切都发生在机器人的无限循环中,因此我的代码中的按钮一直在“监听”。如果用户同时快速点击两个按钮,就会出现错误。
if message.text == 'Пример 1':
cursor = db.cursor()
sql = "INSERT INTO orders (user_id,item) VALUES (%s,%s)"
val = (message.chat.id ,'Пример 1')
result = cursor.execute(sql, val)
db.commit()
cursor.close()
return next(message)
elif message.text == 'Пример 2':
cursor = db.cursor()
sql = "INSERT INTO orders (user_id, item) VALUES (%s,%s)"
val = (message.chat.id,'Пример 2')
result = cursor.execute(sql, val)
db.commit()
cursor.close()
return for_shop(message)
结果变得容易多了。对于那些喜欢快速点击按钮的人,我提供了一个 try-except 异常块。也许它对某人会派上用场 - 关于 sql 查询,我决定将机器人切换到单线程模式,因为我的机器人专注于少数用户:
bot = telebot.TeleBot('your token', threaded=False). 这是如果你走简单的路,不要打扰。UPD。还是找到了解决办法!我认为这对某人来说肯定会派上用场。如果您的机器人在多线程模式下工作,那么将您的数据库连接放入一个函数并在 sql 查询之前调用它就足够了。