gpt4 book ai didi

postgresql - 如何使用 Flask 模型在 postgres 中存储图像

转载 作者:行者123 更新时间:2023-12-02 21:02:23 29 4
gpt4 key购买 nike

我正在尝试使用 flask 模型存储图像。我不知道如何将图像存储在 postgres 中,因此我已将图像编码为 base64 并且我尝试将生成的文本存储在 postgres 中。它正在工作,但是有没有推荐的方法来使用 Flask 模型在 postgres 中存储编码文本或图像

class User_tbl(db.Model):
id = db.Column(db.Integer,primary_key=True)
mobile=db.Column(db.String(13),unique=True)
country=db.Column(db.String(30))
image=db.Column(db.String(256))

def __init__(self,mobile,country,image):
self.mobile=mobile
self.country=country
self.image = image

最佳答案

我知道也许现在回答这个问题已经太晚了,但这些天我正在尝试解决类似的问题,但提出的解决方案似乎都没有阐明主要问题。当然,任何最佳实践都取决于您的需求。但一般而言,您会发现将文件嵌入数据库并不是一个好的做法。这得看情况。阅读 postgresql wiki 生成的“Storing Binary files in the Database ”,我发现在某些情况下强烈推荐这种做法,例如当文件必须是 ACID 时。 。在这些情况下,至少在 Postgres 中,bytea数据类型优于文本或 BLOB 二进制,有时会以服务器内存要求较高为代价。

在这种情况下:1)你不需要特殊的 sqlalchemy 方言。 LargeBinary datatype 就足够了,因为它将被翻译为“目标平台的大型和/或不长二进制类型”。2) 当然,在这种特定情况下,您不需要 PostgreSQL 中的任何编码/解码函数。3) 正如我之前所说,将文件保存到文件系统并不总是一个好的策略。在任何情况下都不要使用带有 base64 编码的文本数据类型。你的数据或多或少会膨胀33%,从而导致巨大的存储影响,而bytea则没有同样的缺点

因此,我建议对您的模型进行以下更改:

class User_tbl(db.Model):
id = db.Column(db.Integer,primary_key=True)
mobile=db.Column(db.String(13),unique=True)
country=db.Column(db.String(30))
image=db.Column(db.LargeBinary)

然后,您只需传递 FileStorage 即可将文件保存到 Postgres 中。二进制参数:

image = request.files['fileimg'].read()

关于postgresql - 如何使用 Flask 模型在 postgres 中存储图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37653496/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com