将 zip 文件转换为 bytea 以存储在 postgres 中 - python

Converting a zip file to bytea to store in postgres - python

我想使用 python.

将 zip 文件存储在 postgres 数据库中

这看起来应该很容易,但我做不出来。

这是我尝试过的方法 - 我的问题是如何将 zip 文件转换为 bytea 对象。

from zipfile import ZipFile
from io import BytesIO, StringIO


filename = "test.zip"
with ZipFile(filename, 'w') as zip_archive:
    binary_stream = BytesIO(zip_archive)

def store_blob(filename, blob):
    with db.engine.connect() as connection:
        res = connection.execute('''INSERT INTO test (filename, model_file) VALUES (%s,                     %s)''', (filename, blob ))


store_blob(filename, binary_stream)

如果文件已经存在,那么您的代码应该如下所示:

def store_blob(filename, blob):
    with db.engine.connect() as connection:
        res = connection.execute(
             '''INSERT INTO test (filename, model_file) VALUES (%s,%s)''', 
             (filename, blob ))

filename = "test.zip"
with open(filename, 'rb') as zip_archive:
    store_blob(filename, zip_archive.read())

您的代码不需要知道文件的格式。您要做的就是使用 binary 标志为 read 打开它以防止解码,并将其 read()(产生 b'')作为参数传递给execute()

我相信这里已经有一个可接受的答案Storing Zip file in Postgres

您可以使用上面答案中演示的 bin2hex() 函数。

关于 postgres bytea 数据类型的信息:https://www.postgresql.org/docs/current/datatype-binary.html#AEN5318