Найти - Пользователи
Полная версия: Отправка в сообщении содержимого БД
Начало » Python для новичков » Отправка в сообщении содержимого БД
1
fromrsu
Добрый день.

Имеется задача отправить в сообщении Telegram содержимое БД.
Прошу помочь - как в Python можно выгрузить содержимое БД, чтобы потом отправить полученный массив единым текстовым сообщением в мессенджере?
Проблем с отправкой, вроде нет, но не знаю как этот массив преобразовать в единый текст.
Прошу помочь с этим.
FishHook
А зачем тут питон вообще?
Любая СУБД умеет делать дамп.
fromrsu
FishHook
А зачем тут питон вообще?Любая СУБД умеет делать дамп.
Бот, отправляющий сообщение, написан на питоне, поэтому обращение к БД буду делать там же, внутри бота.
С СУБД, также, знакомство весьма поверхностное, поэтому задача для меня нетривиальная.
FishHook
Дамп mysql делается одной командой, это 20 букв примерно, что может быть проще?
Вы б погуглили сначала.
JOHN_16
fromrsu
вы сейчас не путаете содержимое базы (дамп) и данные из базы (результат определенного запроса в бд) ?
fromrsu
FishHook
Если Вы про c.execute('SELECT * FROM webafisha').fetchall() , то это мне не особо пока помогает, поскольку не понимаю, что с этим делать дальше.

JOHN_16
Возможно и путаю, последний раз занимался программированием еще очень давно в школе, поэтому вспоминаю с трудом. Прошу извинить, если выразился некорректно.
Попытаюсь объяснить иначе. У меня есть в БД таблица, в которую сливаются определенные данные. Нужно из этой таблицы построчно вытащить информацию для того, чтобы можно было отправить ботом пользователю.
Делать простой вариант с отправкой каждой строки отдельно очень не хочется, поскольку строк около 20 и это будет спам-рассылкой (по эффекту для пользователя). Поэтому желательно содержимое этих строк слить в какой-то единый текст, который можно было бы отправить пользователю.
JOHN_16
fromrsu
То есть вам надо 1) получить данные из БД 2) Преобразовать их в читаемый для пользователя набор строк 3) отправить это через телеграм.
Как решить первый пункт вы знаете - запрос к БД. Второй пункт видимо для вашей задачи основной - вряд ли пользователя устроит чистый вывод SQL запроса. Нужно сформировать строку из данных которые есть в выдаче запроса. Как это сделать - наверняка вы знаете.
Если вы искали готовых решений то врядли они будут - ваши данные знаете как преобразовывать только вы. Мы ничего о них не знаем.
Задача не трудная.
fromrsu
JOHN_16
К сожалению, второй пункт, как раз для меня и проблемный.
Я не ищу готового решения, а пытаюсь понять что необходимо сделать (какие конкретно команды) используются для решения эта задачи.
По первому и третьему пункту Вы правы - решение знаю. Но буду признателен, если поможете со вторым пунктом.
Таблица формата “rowid”/“title”/“category”/“date”, где столбцы 2-4 в обычном текстовом формате. Собственно, что с ними дальше делать после c.execute('SELECT * FROM webafisha').fetchall() для того, чтобы они были единым текстом?
JOHN_16
Может как то так
 c.execute('SELECT * FROM webafisha')
text = '\n'.join( [', '.join(map(str, x)) for x in c] )
fromrsu
JOHN_16
c.execute('SELECT * FROM webafisha')
text = ‘\n’.join( )

Да, так получилось отправить! Большое спасибо!
До Вашей помощи я пошел в какие-то дебри и сделал так:
 for i in c.fetchall():
        row1.append(i)
text = str(row1[0]) + '\n\n' + str(row1[1]) + '\n\n' + str(row1[3])
user_markup = telebot.types.ReplyKeyboardMarkup(True, False)
bot.send_message(message.from_user.id, text, reply_markup=user_markup)

И завис над вопросом о том, что делать для ситуации когда количество строк неизвестно и пещерным методом, путем перебора вручную, их не поставить.

Если кому-то из новичков будет интересно, можете использовать готовый хендлер, который отправляет пользователю в Telegram, по команде /kino информацию из БД.
 @bot.message_handler(commands=['kino'])
def films(message):
    # Подключаемся к БД, которая прописана в отдельном файле constants и приравнена к database_name_films
    conn = sqlite3.connect(constants.database_name_films)
    c = conn.cursor()
    # Запрос данных в БД
    c.execute('SELECT * FROM webafisha')
    # Делаем слияние строк в один текстовый блок
    text = '\n\n'.join([', '.join(map(str, x)) for x in c])
    # Закрываем подключение к БД
    c.close()
    conn.close()
    # Определяем параметры пользовательской клавиатуры в боте
    user_markup = telebot.types.ReplyKeyboardMarkup(True, False)
    # Отрисовываем клавиатуру - тут рисуете свои кнопки (в моем проекте задействованы такие)
    user_markup.row('/ugadaiki', '/sticker', '/kino')
    # Отправка сообщения пользователю по конкретному from_user.id, который получаете из Message
    bot.send_message(message.from_user.id, text, reply_markup=user_markup)

P.S. Использую \n\n вместо \n по причине того, что когда строки идут без разделителей, текст несколько сливается в маленьком экране.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB