как загрузить файлы в базу sqlite3 через telebota (python
в общем я хочу отправлять файлы/фото боту он их сохраняет в базу и при нажатии кнопки все файлы, он показывает список файлов которые там уже есть
это основное меню не обращайте внимания (просто чтоб более понятней было
@bot.message_handler(commands=['menu'])
def menu(message):
markup = types.InlineKeyboardMarkup()
btn1 = types.InlineKeyboardButton("Загрузить документ", callback_data='btn1')
btn2 = types.InlineKeyboardButton("Перейти на сайт", callback_data='btn2')
markup.row(btn1, btn2)
btn3 = types.InlineKeyboardButton("Загрузить фотографию", callback_data='btn3')
btn4 = types.InlineKeyboardButton("Помощь", callback_data='btn4')
markup.row(btn3, btn4)
btn5 = types.InlineKeyboardButton("Просмотреть все файлы", callback_data='btn5')
markup.row(btn5)
bot.send_message(message.chat.id, "Главное меню", reply_markup=markup)
@bot.callback_query_handler(func=lambda callback: callback.data)
def menu_callback(callback):
if callback.data == 'btn1':
bot.send_message(callback.message.chat.id, "Отправьте файл")
elif callback.data == 'btn2':
markup = types.InlineKeyboardMarkup()
markup.add(types.InlineKeyboardButton("Посетить веб-сайт", url='https://pypi.org/project/pyTelegramBotAPI/'))
bot.send_message(callback.message.chat.id, "Перейдите на сайт", reply_markup=markup)
elif callback.data == 'btn3':
bot.send_message(callback.message.chat.id, "Отправьте фотографию")
elif callback.data == 'btn4':
markup = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=1)
photo = types.KeyboardButton("Фотография")
doc = types.KeyboardButton("Документ")
markup.add(photo, doc)
bot.send_message(callback.message.chat.id, "Выберите команду", reply_markup=markup)
elif callback.data == 'btn5':
markup = types.InlineKeyboardMarkup()
markup.add(types.InlineKeyboardButton("...", url='https://pypi.org/project/pyTelegramBotAPI/'))
bot.send_message(callback.message.chat.id, "Все файлы", reply_markup=markup)```
Ответы (1 шт):
Автор решения: Yallz
→ Ссылка
Для этого потребуется скачивать файлы и использовать тип BLOB. На мой взгляд намного проще хранить URL этих файлов и брать их из базы. Я бы организовал это примерно следующим образом.
import sqlite3
# Подключение к базе данных SQLite
conn = sqlite3.connect('photos.db')
cursor = conn.cursor()
# Создание таблицы, если она не существует
cursor.execute('''
CREATE TABLE IF NOT EXISTS photos (
id INTEGER PRIMARY KEY AUTOINCREMENT,
telegram_id INTEGER,
photo_link TEXT
)
''')
# Добавление новой фотографии по Telegram ID
def add_photo_link(telegram_id, photo_link):
cursor.execute('''
INSERT INTO photos (telegram_id, photo_link)
VALUES (?, ?)
''', (telegram_id, photo_link))
conn.commit()
# Извлечение всех фотографий по Telegram ID
def get_all_photo_links(telegram_id):
cursor.execute('''
SELECT photo_link FROM photos WHERE telegram_id=?
''', (telegram_id,))
photo_links = cursor.fetchall()
return [row[0] for row in photo_links]
# Пример использования
telegram_id = 123456789 # Пример Telegram ID
# Добавление новых фотографий
add_photo_link(telegram_id, "https://example.com/photo1.jpg")
add_photo_link(telegram_id, "https://example.com/photo2.jpg")
add_photo_link(telegram_id, "https://example.com/photo3.jpg")
# Извлечение всех фотографий
photos = get_all_photo_links(telegram_id)
print(photos)
# Закрытие соединения с базой данных
conn.close()