• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

Загрузка фото в базу данных бота телеграмм SQLite 3 Python

Ali_Pythonist

Member
21.02.2024
14
0
BIT
101
Ребята, помогите решить задачу. Нужно сделать так, чтобы бот мог сохранять фото в базу данных через BLOB. Если что, я знаю, что можно загрузить file_unique_id в таблицу, но меня такой вариант не устраивает, так как при удалении сообщения этот file_unique_id будет недействителен. Код ниже.

Python:
import asyncio
import sqlite3 as sq
from aiogram import Bot, Dispatcher, types, F
from aiogram.filters import Command
from testBot.token_bot import token

bot = Bot(token=token)
dp = Dispatcher()

@dp.message(Command('start'))
async def bot_start(message: types.Message):
    await message.answer(text='Привет отправь мне фото.')


@dp.message(F.photo)
async def bot_photo(message: types.Message):
    with sq.connect('sqlite_bot') as sq_bot:
        data_photo = message.photo[-1]
        cur = sq_bot.cursor()
        cur.execute("""CREATE TABLE IF NOT EXISTS user(photo BLOB, PRIMARY KEY(photo))""")
        cur.execute("""INSERT OR IGNORE INTO user(photo) VALUES(?)""",(data_photo.file_unique_id,))

async def main():
   await dp.start_polling(bot)
asyncio.run(main())

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

Python:
import asyncio
import sqlite3 as sq
from aiogram import Bot, Dispatcher, types, F
from aiogram.filters import Command
from testBot.token_bot import token

bot = Bot(token=token)
dp = Dispatcher()

@dp.message(Command('start'))
async def bot_start(message: types.Message):
    await message.answer(text='Привет отправь мне фото.')


@dp.message(F.photo)
async def bot_photo(message: types.Message):
    with sq.connect('sqlite_bot') as sq_bot:
        data_photo = message.photo[-1]
        cur = sq_bot.cursor()
        cur.execute("""CREATE TABLE IF NOT EXISTS user(photo BLOB, PRIMARY KEY(photo))""")
        cur.execute("""INSERT OR IGNORE INTO user(photo) VALUES(?)""",(data_photo.file_unique_id,))
        
@dp.message(Command('photo'))
async def send_photo_bot(message: types.Message):
    with sq.connect('sqlite_bot') as sq_bot:
        cur = sq_bot.cursor()
        photo = cur.execute("""SELECT * FROM user WHERE photo = ? """, (photo,)).fetchone()
        await message.answer_photo(photo=photo)


async def main():
   await dp.start_polling(bot)
asyncio.run(main())
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!