Вытащить данные если есть такой id в бд

Библиотека telebot на python, бд mysql

Структура бд

Вот кусок кода:


        if message.chat.type == 'private':
        markup = types.InlineKeyboardMarkup(row_width=2)
        markup.add(item1)
        bot.send_message(message.chat.id,
                         'Привет '+message.from_user.first_name+ ' !\n'+
                         'Я помогаю отслеживать дни рождения в групповых чатах и '
                         'могу автоматически собирать деньги в подарок именинникам.\n\n'
                         'Добавьте меня в любую группу, используя кнопку ниже ?\n\n'
                         'Не беспокойтесь, мне не нужно быть администратором в группе '
                         'и я не умею читать переписку ? ',reply_markup=markup)

        cursor.execute(f"select * from chats where group_id={str(message.chat.id)}")
        ll = cursor.fetchall()
        if len(ll) >= 0:
            ss = cursor.execute(f"select group_title from chats")

            bot.send_message(message.from_user.id, f'Ты пришёл из "{ss}"')
        else:
            bot.send_message(message.chat.id,'Я не знаю такой группы')

    else:
        markup = types.InlineKeyboardMarkup(row_width=2)
        item2 = types.InlineKeyboardButton('Добавить свой ДР в каленьдарь',
                                           url=f"http://t.me/{bot.get_me().username}?start={message.chat.id}")
        markup.add(item2)
        bot.send_message(message.chat.id, group_start_text, reply_markup=markup)


Юзер по кнопке из группы переходит в бота,в этой кнопке хранится id этой группы.Нужно что бы бот написал при заходе в бота из группы,из какой группы он пришел.Я пытаюсь вытащить sql запросом но не получается.Подскажите как правильно,структура бд на скрине.

.


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

Автор решения: Denis Rudnitskiy

Ошибка у Вас в том, что вы путаете chat.id и group_id. То есть вы делаете следующее:

cursor.execute(f"select * from chats where group_id={str(message.chat.id)}") ll = cursor.fetchall()

Вы пытаетесь подставить в sql-запрос chat_id с пользователем. Чтоб в этом удостовериться, напишите в коде следующее:

print(message.chat.id)

Вы увидите, что результат не отрицательный, и такого значения в вашей БД нет.

Так же message.chat.id в Телеграмме не бывают отрицательные (по крайней мере я такого не видел). Поэтому Вы получаете из этого sql-запроса тип данных - "None" и появляется ошибка TypeError из-за того, что нельзя проверить его на длину с помощью len().

Чтоб Вам было проще - выводите в консоль значения, которые получаете посредством sql-запросов :)

→ Ссылка