#python #postgresql #pdf #fastapi
Вопрос:
Мне нужно сохранить небольшой PDF-файл в базе данных Postgres (у меня уже есть готовая таблица со столбцом bytea для данных), затем удалить файл и использовать данные в базе данных для восстановления PDF таким, каким он был.
Для контекста я работаю с FastApi в Python3, поэтому я могу получить файл в байтах или как целый файл. Итак, основными шагами являются:
- Получение файла в байтах или файла с помощью FastAPI
- Вставка его в базу данных Postgres
- Извлеките данные из БД
- Создайте новый PDF-файл с данными.
Как я могу сделать это чистым способом?
Функция загрузки из FastAPI :
def import_data(file: UploadFile= File(...)):
# Put the whole data into a variable as bytes
pdfFile = file.file.read()
database.insertPdfInDb(pdfFile)
# Saving the file we just got to check if it's intact (it is)
file_name = file.filename.replace(" ", "-")
with open(file_name,'wb ') as f:
f.write(pdfFile)
f.close()
return {"filename": file.filename}
Функция вставки данных в базу данных Postgres :
def insertPdfInDb(pdfFile):
conn = connectToDb()
curs = conn.cursor()
curs.execute("INSERT INTO PDFSTORAGE(pdf, description) values (%s, 'Some description...')", (psycopg2.Binary(pdfFile),))
conn.commit()
print("PDF insertion in the database attempted.")
disconnectFromDb(conn)
return 0
# Saving the file we just got to check if it's intact (it is)
file_name = file.filename.replace(" ", "-")
with open(file_name,'wb ') as f:
f.write(pdfFile)
f.close()
return {"filename": file.filename}
Часть экспорта только что запущена и полностью содержит код попытки и ошибки.
Комментарии:
1. Вам нужно будет показать некоторый образец кода, который вы написали и с которым работаете.
2. С каким из этих 4 шагов у вас в настоящее время возникают трудности?
3. Я могу получить файл из FastAPI и получить его в виде байтов. С этим нет проблем. Вставить его в базу данных тоже нормально, но, возможно, проблема кроется именно в этом. Извлечение данных нехорошо, как и помещение их в новый файл.