Некорректно работает конструкция if...else. Телеграм бот

Всегда срабатывает else, нужно чтобы выводилось сообщение вы не подписаны, в случае, если в таблице поле status == FALSE, у меня же всегда выводит все то, что в блоке else. Используется библиотека aiogram.

@dp.message_handler(commands=['unsubscribe'])
async def unsubscribe(message:types.Message):
    if (db.subscriber_exists(message.from_user.id) == False):
        print (db.get_status(message.from_user.id))
        # если юзера нет в базе, добавляем с неактивной подпиской (запоминаем)
        await message.answer("Вы не подписаны.")
    else:
        # если юзер есть в базе, то обновляем статус подписки
        db.update_subscription(message.from_user.id, False)
        #print (db.get_status(message.from_user.id))
        await message.answer("Я тебе больше не нужен...")
        await message.answer_sticker(r'CAACAgIAAxkBAAEBv8Vf-FRnpC5qrQZn2Qwt-rpBs-OJpwACDAEAAhZ8aAPEXuoz0922Fx4E')
        await message.answer("прощай ?")

db

import sqlite3

class SQLighter:

    def __init__(self, database):
        """Подключаемся к БД и сохраняем курсор соединения"""
        self.connection = sqlite3.connect(database)
        self.cursor = self.connection.cursor()

    def get_subscriptions(self, status = True):
        """Получаем всех активных подписчиков бота"""
        with self.connection:
            return self.cursor.execute("SELECT * FROM `users` WHERE `status` = ?", (status,)).fetchall()

    def subscriber_exists(self, user_id):
        """Проверяем, есть ли уже юзер в базе"""
        with self.connection:
            result = self.cursor.execute('SELECT * FROM `users` WHERE `user_id` = ?', (user_id,)).fetchall()
            return bool(len(result))

    def add_subscriber(self, user_id, status = True):
        """Добавляем нового подписчика"""
        with self.connection:
            return self.cursor.execute("INSERT INTO `users` (`user_id`, `status`) VALUES(?,?)", (user_id,status))

    def update_subscription(self, user_id, status):
        """Обновляем статус подписки пользователя"""
        with self.connection:
            return self.cursor.execute("UPDATE `users` SET `status` = ? WHERE `user_id` = ?", (status, user_id))

    def get_status(self, user_id):
        """получаем статус юзера"""
        with self.connection:
            result = self.cursor.execute("SELECT `status` FROM `users` WHERE `user_id` = ?", (user_id,)).fetchall()
            return bool(len(result))

    def close(self):
        """Закрываем соединение с БД"""
        self.connection.close()

Ответы (1 шт):

Автор решения: gil9red

Думаю, проверку нужно поменять на fetchone:

    def subscriber_exists(self, user_id):
        """Проверяем, есть ли уже юзер в базе"""
        with self.connection:
            has = self.cursor.execute('SELECT 1 FROM `users` WHERE `user_id` = ?', (user_id,)).fetchone()
            return bool(has)

UPD.

Если у вас подписчик определяется не только наличием в базе данных, но и статусом, то нужно это проверять (добавьте проверку status):

    def subscriber_exists(self, user_id):
        """Проверяем, есть ли уже юзер в базе"""
        with self.connection:
            has = self.cursor.execute('SELECT 1 FROM `users` WHERE `user_id` = ? and `status` = 1', (user_id,)).fetchone()
            return bool(has)

Или можно подписчика через статус проверять, но для этого нужно его правильно получать:

    def get_status(self, user_id):
        """получаем статус юзера"""
        with self.connection:
            result = self.cursor.execute("SELECT `status` FROM `users` WHERE `user_id` = ?", (user_id,)).fetchone()
            # Если юзер не был найден
            if result is None:
                return False
            return bool(result[0])

Тогда, можно проверить статус так:

if not db.get_status(message.from_user.id):
    await message.answer("Вы не подписаны.")
else:
    ...

PS.

И я бы еще условие упростил:

if not db.subscriber_exists(message.from_user.id):
    print(db.get_status(message.from_user.id))
    ...
→ Ссылка