В PostgreSQL вы можете использовать тип данных `ARRAY` для хранения нескольких путей к изображениям, привязанным к определенному пользователю (user_id).
Для сохранения случайно появляющихся картинок в БД с помощью библиотеки Aiogram вы можете выполнить следующие шаги:
1. Создайте таблицу в вашей базе данных для хранения путей к изображениям. Например:
```sql
CREATE TABLE user_images (
user_id INTEGER,
image_paths TEXT[]
);
```
2. В функции вашего бота, которая обрабатывает получение и сохранение картинок, добавьте код для получения пути к изображению:
```python
@dp.message_handler(content_types=types.ContentTypes.PHOTO)
async def handle_photo(message: types.Message):
# Получаем ID пользователя
user_id = message.from_user.id
# Сохраняем изображение
photo = message.photo[-1] # Берем последнюю версию фото (с наибольшим разрешением)
photo_path = f"images/{user_id}_{photo.file_id}.jpg" # Генерируем путь к изображению
await photo.download(photo_path) # Сохраняем изображение на диск
# Обновляем запись в БД с путем к изображению
async with db.pool.acquire() as conn:
await conn.execute(
"UPDATE user_images SET image_paths = array_append(image_paths, $1) WHERE user_id = $2",
photo_path,
user_id
)
await message.answer("Изображение сохранено")
```
3. В другой функции, которая будет выводить пользователю пути к изображениям, вы можете получить пути к изображениям из БД и использовать их при необходимости:
```python
async def get_image_paths(user_id):
async with db.pool.acquire() as conn:
image_paths = await conn.fetchval(
"SELECT image_paths FROM user_images WHERE user_id = $1",
user_id
)
return image_paths
@dp.message_handler(commands=["images"])
async def handle_images_command(message: types.Message):
user_id = message.from_user.id
image_paths = await get_image_paths(user_id)
if image_paths:
await message.answer("\n".join(image_paths))
else:
await message.answer("У вас еще нет сохраненных изображений")
```
При желании, можно добавить дополнительную обработку ошибок и проверки наличия папки для сохранения изображений. Сам код может быть адаптирован к вашим потребностям и структуре вашего проекта.