Работа через return python

Попытаюсь изложить кратко

Работаю с telethon и sqlite3. Мне нужно чтобы функция возвращала результат и вроде бы ничего но есть проблема.

Приведу пример:

def handling_input(message):

        chat_id = message.chat.id        
        splitwords = message.text.split()
        
        if len(splitwords) == 3:
            msg = bot.send_message(chat_id, 'Обрабатываем ...')
     
        
            surname = splitwords[0]
            name = splitwords[1]
            patronymic = splitwords[2]

            data = func.handlingfullname(fullname=message.text, name=name, surname=surname, patronymic=patronymic)
            bot.send_message(chat_id, data)

В этом куске кода обрабатывается информация пользователя, а затем если есть 3 слова запускается функция по поиску заданных параметров пользователя ниже:

def handlingfullname(fullname, name, surname, patronymic):
    conn = sqlite3.connect('databases/test.sqlite3')
    c = conn.cursor()

    rows = c.execute(f"SELECT * FROM users WHERE fullname LIKE '%{surname}%'").fetchall()

    for row in rows:
        print(row)
        print(len(rows))
        return row #,rows

Функция выше ищет данные в таблице sqlite3 и возрващает их, а так же количество строк которое получилось, но есть несколько проблем.

1. Первый вопрос. Из таблицы видом

('товаровед', '0322218591')

('Суматра ЛТД', '0322218591')

И так далее... (10+ строк)

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

2.Второй вопрос: Как return не только данные таблицы sqlite3 но и количество строк которые образовались, чтобы бот отправил сообщение сколько строк получилось. Как можете заметить то сам код написан, в первой функции - print(len(rows)), но я не знаю как возвратить это значение.

Если вы дочитали до конца, я уже благодарен, не каждый будет читать массу информации


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

Автор решения: Эникейщик

В каждом учебнике написано, что return ЗАВЕРШАЕТ выполнение функции!!! Все, что написано после первого встреченного return - не выполняется!

for row in rows:
    print(row)
    print(len(rows))
    return row # как только выполнение доходит до этой строчки, функция завершается.

Если нужно вернуть значение len(rows), то нужно и написать return len(rows), а не print(len(rows)).

Если нужно вернуть все данные, то нужно написать соответственно, return rows, а не создавать ненужный цикл.

→ Ссылка