@uberkiba

Почему база данных не вносит данные в таблицу?

При оплате подписки в боте бд должна записать время подписки в таблицу, но почему-то этого не происходит, далее при проверке наличия подписки, то есть ее времени функция в бд должна вернуть TRUE или FALSE, но почему-то всегда возвращает FALSE даже если я сам внесу данные в БД. Кто может подсказать что не так? Остальные столбцы в БД заполняются верно и без проблем

db.py
def set_time_sub(self, chat_id, time_sub):
        with self.connection:
            return self.cursor.execute("UPDATE `users` SET `time_sub` = ? WHERE `chat_id` = ?", (chat_id, time_sub,))
            
    def get_time_sub(self, chat_id):
        with self.connection:
            result = self.cursor.execute("SELECT `time_sub` FROM `users` WHERE `chat_id` = ?", (chat_id,)).fetchall()
            for row in result:
                time_sub = int(row[0])
            return time_sub
            
            
    def get_sub_status(self, chat_id):
        with self.connection:
            result = self.cursor.execute("SELECT `time_sub` FROM `users` WHERE `chat_id` = ?", (chat_id,)).fetchall()
            for row in result:
                time_sub = int(row[0])
                
            if time_sub > int(time.time()):
                return True
            else:
                return False


main.py
@dp.callback_query_handler(text_contains='check_payment_')
async def menu(call: types.CallbackQuery):
    code = call.data[14:]
    result_pay = False
    try:
        qiwi_history = await get_history(config.number, config.qiwi)

        for i in range(4):
            if qiwi_history['data'][i]['comment'] == str(code) and qiwi_history['data'][i]['sum']['amount'] == int(
                    config.cost):
                result_pay = True
                message = call.from_user.id
                time_sub = int(time.time()) + days_to_seconds(7)
                db.set_time_sub(message, time_sub)
                await call.message.edit_text(f' Оплата найдена ')
        if not result_pay:
            payment = InlineKeyboardMarkup()
            payment.add(InlineKeyboardButton('Проверить оплату', callback_data=f'check_payment_{code}'))
            await bot.send_message(call.from_user.id, 'Платеж не найден.', reply_markup=payment)
    except Exception as e:
        payment = InlineKeyboardMarkup()
        payment.add(InlineKeyboardButton('Проверить оплату', callback_data=f'check_payment_{code}'))
        await bot.send_message(call.from_user.id, "Администратор не настроил оплату, уведомите его об этом")
        print(e)


(Оплата проверяется, платеж получен)

main.py
elif message.text == ' Парень':
            if db.get_sub_status(message.chat.id) == True:
                user_info = db.get_gender_chat('male')
                chat_two = user_info[0]
                if db.create_chat(message.chat.id, chat_two) == False:
                    db.add_queue(message.chat.id, db.get_gender(message.chat.id))
                    await bot.send_message(message.chat.id, ' Поиск собеседника', reply_markup = stop_search())
                else:
                    mess = 'Собеседник найден! Чтобы остановить диалог, напишите /stop'

                    await bot.send_message(message.chat.id, mess, reply_markup = stop_dialog())
                    await bot.send_message(chat_two, mess, reply_markup = stop_dialog())

            else:
                await bot.send_message(message.from_user.id, 'Купите подписку', reply_markup=kb.buy_lic)

Тут спрашиваю статус, подписки всегда ее нет
  • Вопрос задан
  • 98 просмотров
Пригласить эксперта
Ответы на вопрос 1
@borisalekseev
extra beginner junior python backend
Чтобы данные сохранились, необходимо вызвать connection.commit(), перед тем как закрывать connection (то есть внутри with).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы