Некорректно записываются данные в БД от пользователей при одновременном использовании Бота
Если пользователи нажимают кнопку "Добавить в заказ" одновременно, то в бд происходит некорректная запись. Пример Пользователи 1 и 2 одновременно нажимают кнопку. Пользователю 2 записывается в заказ "морс морс", сумма также равна 2шт морса.
@bot.callback_query_handler(func=lambda call: call.data == 'mors_k_05_1sht')
def mors_k_05_1sht(call):
markup = types.InlineKeyboardMarkup()
btn1 = types.InlineKeyboardButton('Продолжить заказ ' + '➡️', callback_data='menu')
markup.row(btn1)
btn2 = types.InlineKeyboardButton('Ваш заказ' + '?', callback_data='buy')
markup.row(btn2)
btn3 = types.InlineKeyboardButton('⬅️' + ' Назад', callback_data='mors_k_05')
markup.row(btn3)
photo_url = 'https://static.tildacdn.com/stor3238-3233-4030-b961-393331613832/96753182.jpg'
price_mors_k_05_1sht = 98
name = "Натуральный клюквенный морс 0,5 л - 98₽"
def get_chat_id(call):
return call.message.chat.id
chat_id = get_chat_id(call)
conn = sqlite3.connect('admin.db')
cursor = conn.cursor()
# Получаем количество записей в таблице
cursor.execute("SELECT COUNT(*) FROM users")
count = cursor.fetchone()[0]
# Получаем текущее значение поля Заказ
cursor.execute("SELECT Заказ FROM users WHERE ROWID = (SELECT MAX(ROWID) FROM users)")
previous_order = cursor.fetchone()[0]
# Получаем текущее значение поля Сумма
cursor.execute("SELECT Сумма FROM users WHERE ROWID = (SELECT MAX(ROWID) FROM users)")
sum_order = cursor.fetchone()[0]
# Объединение текущего значения с новым значением
#Заказ
if previous_order is not None:
new_order = previous_order + " " + name
else:
new_order = name
#Сумма
if sum_order is not None:
new_sum_order = sum_order + price_mors_k_05_1sht
else:
new_sum_order = price_mors_k_05_1sht
# Обновление записи в базе данных
if count > 0:
cursor.execute(f"UPDATE users SET Заказ = '{new_order}', "
f"Сумма = '{new_sum_order}' WHERE ROWID = (SELECT MAX(ROWID) FROM users)")
else:
cursor.execute(f"INSERT INTO users (chat_id, Заказ, Сумма) "
f"VALUES ({chat_id}, '{new_order}', '{new_sum_order}')")
conn.commit()
conn.close()
#Добавляем задержку
bot.edit_message_media(chat_id=chat_id, message_id=call.message.message_id,
media=types.InputMediaPhoto(photo_url), reply_markup=markup)
bot.edit_message_caption(chat_id=chat_id, message_id=call.message.message_id,
caption='<u>Натуральный клюквенный морс 0,5 л</u>'
'\n<b>ДОБАВЛЕНО В ЗАКАЗ</b>', parse_mode='html', reply_markup=markup)