Сохранение файла изображения в базе данных Postgres — Python

создание эффективных программ на Python Программирование и разработка

В этой статье мы увидим, как сохранять файлы изображений в базе данных postgresql с помощью Python.

Psycopg2 — это драйвер, который используется для взаимодействия с данными Postgres с использованием языка сценариев Python. Он используется для выполнения операций CRUD с данными Postgres.

Данные, обрабатываемые в приложениях, могут быть в любом формате. Например, строки, числа и так далее. Время от времени нам нужно загружать изображения на столы. В этой статье давайте научимся загружать изображения в Postgres с помощью Python.

Формат BLOB и BYTEA

Обычно поля изображения представляют собой типы данных BLOB. BLOB — это большие двоичные объекты, которые используются для хранения огромных объемов данных. Изображения, аудио и видео файлы обычно хранятся в виде BLOB в базах данных. SQL, MySQL и другие базы данных поддерживают тип данных BLOB. Но Postgres не поддерживает формат BLOB. Вместо этого он имеет формат BYTEA для обработки двоичных данных. BYTEA не подходит для хранения больших объемов данных. Столбец данных типа BYTEA может хранить до 1 ГБ данных.

Давайте посмотрим, какие шаги необходимо предпринять для загрузки изображений в таблицу Postgres —

  • Рассмотрим базу данных CartoonDB с таблицей Cartoon. В нем есть поля cartoonID, name, cartoonImg. Поле cartoon будет иметь тип INTEGER, имя будет TEXT, а cartoonImg будет иметь тип данных BYTEA.
  • Для выполнения операций CRUD с данными Postgres с использованием кода Python нам понадобится библиотека psycopg2. Следовательно, установите его, используя команду «pip install psycopg2» на терминале.
  • Адаптер psycopg2 имеет метод connect (), который позволяет подключаться к базе данных, передавая имя пользователя, пароль, имя хоста и порт в качестве параметров. Мы также можем передать имя базы данных. Он возвращает действительный объект соединения при успешном соединении.
  • Используя объект подключения, мы можем создать объект курсора, который действует как указатель на базу данных. Мы можем использовать объект курсора для запуска SQL-запросов к данным таблицы. Используя его, мы создадим и загрузим записи изображений в таблицу.
Читайте также:  Sprintf в C++

Код для того же, как указано ниже —

Python3

# Import the required library
import psycopg2
 
# Method to create a connection object
# It creates a pointer cursor to the database 
# and returns it along with Connection object
def create_connection():
    # Connect to the database
    # using the psycopg2 adapter.
    # Pass your database name ,# username , password , 
    # hostname and port number
    conn = psycopg2.connect(dbname='DisneyDB',
                            user='postgres',
                            password='admin',
                            host='localhost',
                            port='5432')
    # Get the cursor object from the connection object
    curr = conn.cursor()
    return conn, curr
 
def create_table():
    try:
        # Get the cursor object from the connection object
        conn, curr = create_connection()
        try:
            # Fire the CREATE query
            curr.execute("CREATE TABLE IF NOT EXISTS \
            cartoon(cartoonID INTEGER, name TEXT,\
            cartoonImg BYTEA)")
             
        except(Exception, psycopg2.Error) as error:
            # Print exception
            print("Error while creating cartoon table", error)
        finally:
            # Close the connection object
            conn.commit()
            conn.close()
    finally:
        # Since we do not have to do anything here we will pass
        pass
 
def write_blob(cartoonID,file_path,name):
    try:
        # Read data from a image file
        drawing = open(file_path, 'rb').read()
        # Read database configuration
        conn, cursor = create_connection()
        try:           
            # Execute the INSERT statement
            # Convert the image data to Binary
            cursor.execute("INSERT INTO cartoon\
            (cartoonID,name,cartoonImg) " +
                    "VALUES(%s,%s,%s)",
                    (cartoonID,name, psycopg2.Binary(drawing)))
            # Commit the changes to the database
            conn.commit()
        except (Exception, psycopg2.DatabaseError) as error:
            print("Error while inserting data in cartoon table", error)
        finally:
            # Close the connection object
            conn.close()
    finally:
        # Since we do not have to do
        # anything here we will pass
        pass
       
# Call the create table method      
create_table()
# Prepare sample data, of images, from local drive
write_blob(1,"F:\\TeachPytho\\GFGPhotos\\casper.jpg","Casper")
write_blob(2,"F:\\TeachPytho\\GFGPhotos\\archie.jpg","Archie")
write_blob(3,"F:\\TeachPytho\\GFGPhotos\\tintin.png","Tintin")
write_blob(4,"F:\\TeachPytho\\GFGPhotos\\pikachu.jpg","Pikachu")
write_blob(5,"F:\\TeachPytho\\GFGPhotos\\kungfupanda.jpg","Kung Fu Panda")

После выполнения кода мы можем просмотреть данные в инструменте PgAdmin4. Данные таблицы показаны ниже:

Читайте также:  Как объединить массивы в C++?

После выполнения кода мы можем просмотреть данные в инструменте PgAdmin4

Оцените статью
bestprogrammer.ru
Добавить комментарий

Adblock
detector