将 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
我想使用 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