Python 处理PostgreSQL BLOB数据

Python 处理PostgreSQL BLOB数据

PostgreSQL是一个开源的面向对象的关系型数据库管理系统,提供多样的数据类型来保存数据。BLOB(二进制大对象)数据类型就是其中之一。它用于存储大型二进制记录,如音频、视频和照片文件。

我们首先需要设置psycopg2包,它提供了一个Python接口,用于在Python中与PostgreSQL进行交互。我们使用pip包管理器来安装它。

语法

pip install psycopg2-binary

在安装了psycopg2库之后,我们需要使用Python连接到我们的PostgreSQL数据库。

以下操作可用于处理PostgreSQL中的BLOB记录

创建一个带有BLOB列的表

在PostgreSQL中,应使用字节数据类型来构建带有BLOB列的表。我们可以使用字节数据类型存储最多1GB的二进制信息。

将BLOB数据插入表中

我们需要从文件中读取二进制信息,并将其插入到“image”列中,以便将BLOB数据插入表中。可以使用SQL语句INSERT将数据插入到具有BLOB列的表中。

从表中读取BLOB数据

我们需要使用SELECT语句从“image”列中检索二进制记录,以读取表中的BLOB记录。

示例

下面是一个示例代码,演示如何使用psycopg2库在Python中处理PostgreSQL的BLOB(二进制大对象)数据。

“id”列的类型为SERIAL,它会自动生成每一行的唯一整数值。“image”列的类型为BYTEA,用于存储BLOB数据。

步骤

  • 导入所需的库:psycopg2和io。

  • 使用psycopg2库建立与您的PostgreSQL数据库的连接。

  • 从连接中创建一个游标对象。

  • 执行一个SELECT语句,从数据库中检索BLOB数据。

  • 使用fetchone()方法检索结果集的第一行。

  • 从结果集中获取BLOB数据,并存储在一个变量中。

  • 使用io库创建一个BytesIO对象,并将BLOB数据传递给它。

  • 使用BytesIO对象读取数据。

  • 一旦在内存中拥有数据,您可以对其进行任何必要的处理。

import psycopg2

conn = None
try:
    # connect to the PostgreSQL server
'''Establishing Database connection. Fill up your local Database’s user and password.'''

    conn = psycopg2.connect(
        host='localhost',
        dbname='mydb',
        user='postgres',
        password='user',
        port=5432
    )

    cur = conn.cursor()

# Creating a table with a BLOB column
    cur.execute(
        "CREATE TABLE blob_datastore (s_no serial, file_name VARCHAR ( 50 ), blob_data bytea)")

    # SQL query to insert data into the database.
    insert_script = '''
        INSERT INTO blob_datastore(s_no,file_name,blob_data) VALUES (%s,%s,%s);
    '''

    # psycopg2.Binary(File_in_Bytes) is used to convert the binary data.
    BLOB_1 = psycopg2.Binary(
        open(f"files\toast_flip.mp4", 'rb').read())  
    BLOB_2 = psycopg2.Binary(
        open(f'files\ex.jpg', 'rb').read())  
    BLOB_3 = psycopg2.Binary(open(f'files\a-gif.gif', 'rb').read()) 
    BLOB_4 = psycopg2.Binary(open(f'files\UNIT IV.pdf'', 'rb').read()) 

    insert_values = [(1, 'toast_flip.mp4', BLOB_1), 
           (2, 'ex.jpg', BLOB_2),
               (3, 'a-gif.gif', BLOB_3), 
           (4, 'UNIT UV.pdf', BLOB_4)]

    for insert_value in insert_values:
        cur.execute(insert_script, insert_value)
        print(insert_value[0], insert_value[1],
            "[Binary Data]", "row Inserted Successfully")

    # SQL query to fetch data.
    cur.execute('SELECT * FROM BLOB_DataStore')

    for row in cur.fetchall():
        BLOB = row[2]
        open("new"+row[1], 'wb').write(BLOB)
        print(row[0], row[1], "BLOB Data is saved")

    cur.close()

except(Exception, psycopg2.DatabaseError) as error:
    print(error)
finally:
    if conn is not None:

        conn.commit()

输出

1 toast_flip.mp4 [Binary Data] row Inserted Successfully
2 ex.jpg [Binary Data] row Inserted Successfully
3 a-gif.gif [Binary Data] row Inserted Successfully
4 UNIT IV.pdf [Binary Data] row Inserted Successfully
1 toast_flip.mp4 BLOB Data is saved in Current Directory
2 ex.jpg BLOB Data is saved in Current Directory
3 a-gif.gif BLOB Data is saved in Current Directory
4 UNIT UV.pdf BLOB Data is saved in Current Directory

Python 处理PostgreSQL BLOB数据

结论

使用Python和psycopg2库,开发人员可以轻松处理PostgreSQL中的BLOB数据。使用此库,用户可以创建具有BLOB列的表,将二进制数据插入所创建的表中,并使用psycop2库从表中检索二进制数据。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程