Форум сайта python.su
0
Добрый день.
Имеется задача отправить в сообщении Telegram содержимое БД.
Прошу помочь - как в Python можно выгрузить содержимое БД, чтобы потом отправить полученный массив единым текстовым сообщением в мессенджере?
Проблем с отправкой, вроде нет, но не знаю как этот массив преобразовать в единый текст.
Прошу помочь с этим.
Офлайн
568
А зачем тут питон вообще?
Любая СУБД умеет делать дамп.
Офлайн
0
FishHookБот, отправляющий сообщение, написан на питоне, поэтому обращение к БД буду делать там же, внутри бота.
А зачем тут питон вообще?Любая СУБД умеет делать дамп.
Офлайн
568
Дамп mysql делается одной командой, это 20 букв примерно, что может быть проще?
Вы б погуглили сначала.
Офлайн
221
fromrsu
вы сейчас не путаете содержимое базы (дамп) и данные из базы (результат определенного запроса в бд) ?
Офлайн
0
FishHook
Если Вы про c.execute('SELECT * FROM webafisha').fetchall() , то это мне не особо пока помогает, поскольку не понимаю, что с этим делать дальше.
JOHN_16
Возможно и путаю, последний раз занимался программированием еще очень давно в школе, поэтому вспоминаю с трудом. Прошу извинить, если выразился некорректно.
Попытаюсь объяснить иначе. У меня есть в БД таблица, в которую сливаются определенные данные. Нужно из этой таблицы построчно вытащить информацию для того, чтобы можно было отправить ботом пользователю.
Делать простой вариант с отправкой каждой строки отдельно очень не хочется, поскольку строк около 20 и это будет спам-рассылкой (по эффекту для пользователя). Поэтому желательно содержимое этих строк слить в какой-то единый текст, который можно было бы отправить пользователю.
Офлайн
221
fromrsu
То есть вам надо 1) получить данные из БД 2) Преобразовать их в читаемый для пользователя набор строк 3) отправить это через телеграм.
Как решить первый пункт вы знаете - запрос к БД. Второй пункт видимо для вашей задачи основной - вряд ли пользователя устроит чистый вывод SQL запроса. Нужно сформировать строку из данных которые есть в выдаче запроса. Как это сделать - наверняка вы знаете.
Если вы искали готовых решений то врядли они будут - ваши данные знаете как преобразовывать только вы. Мы ничего о них не знаем.
Задача не трудная.
Офлайн
0
JOHN_16
К сожалению, второй пункт, как раз для меня и проблемный.
Я не ищу готового решения, а пытаюсь понять что необходимо сделать (какие конкретно команды) используются для решения эта задачи.
По первому и третьему пункту Вы правы - решение знаю. Но буду признателен, если поможете со вторым пунктом.
Таблица формата “rowid”/“title”/“category”/“date”, где столбцы 2-4 в обычном текстовом формате. Собственно, что с ними дальше делать после c.execute('SELECT * FROM webafisha').fetchall() для того, чтобы они были единым текстом?
Офлайн
221
Может как то так
c.execute('SELECT * FROM webafisha') text = '\n'.join( [', '.join(map(str, x)) for x in c] )
Офлайн
0
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)

@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)
Отредактировано fromrsu (Окт. 21, 2016 22:16:43)
Офлайн