как загрузить файлы в базу sqlite3 через telebota (python

Рейтинг: 0Ответов: 1Опубликовано: 16.05.2023

в общем я хочу отправлять файлы/фото боту он их сохраняет в базу и при нажатии кнопки все файлы, он показывает список файлов которые там уже есть

это основное меню не обращайте внимания (просто чтоб более понятней было

@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)```

Ответы

▲ 0

Для этого потребуется скачивать файлы и использовать тип 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()