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

  Kiến thức lập trình

Я делаю телеграмм бота, и мне нужно сохранять отправление пользователем фото, в таблицу SQLite 3, а потом обратно отправлять этому пользователю через метод SELECT, но у меня не получается, и программа не работает. Помогите пожалуйста вот код.



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())

Я смог добиться лиш того, что мой бот сохранял непосредственно file_unique_id в таблицу, но меня это не устраивает, так как при удаление фото из лс пользователем, этот file_unique_id просто будет не действительным. Так же не получается воспользоваться методом SELECT, из SQLite 3, что бы выбрать непосредственно само фото по file_unique_id, так же был бы рад, если вы мне расскажете, как выбирать данных из таблицы, и отправлять её пользователю.

New contributor

Али Гусейнов is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.

LEAVE A COMMENT