【问题标题】:Which SQLAlchemy column type should be used for binary data?哪种 SQLAlchemy 列类型应该用于二进制数据?
【发布时间】:2015-11-19 19:20:21
【问题描述】:

我想将音频文件存储在我的数据库中。例如,我知道字符串会使用db.String,整数db.Integer,但不会使用音频数据。在 SQLAlchemy 中使用什么数据类型来存储这种类型的数据?

class Audio(db.Model):
    __tablename__ = 'audio'
    id = db.Column(db.Integer, primary_key=True)
    timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)
    author_id = db.Column(db.Integer, db.ForeignKey('users.id'))
    title = db.Column(db.String(64), unique=True)

【问题讨论】:

    标签: python flask sqlalchemy


    【解决方案1】:

    存储二进制数据时,使用LargeBinary 类型。尽管它的名字,它适用于任何大小的二进制数据。

    data = db.Column(db.LargeBinary)
    

    在 Flask 视图中从上传的文件中读取数据。

    audio.data = request.files['data'].read()
    

    相比将数据存储在数据库中,通常最好将文件存储在文件系统中,并将文件的路径存储在数据库中。

    由于您可能是在提供这些文件,而不仅仅是存储它们,因此从文件系统提供文件效率更高。有关从数据库提供数据的更多讨论,请参阅this answer

    【讨论】:

      【解决方案2】:

      我不建议将音频文件存储在数据库中,您应该将它们存储在文件中,然后将文件路径存储在数据库中,this 帖子讨论了将二进制数据存储在数据库中。

      因此,当上传文件时,您可以使用数据库行的 id 作为文件名,然后将其从磁盘读取回客户端。这也允许在您流式传输音频 (HTTP 206) 时更轻松地部分读取文件,如果您使用多种音频格式,并且如果您想要要保留您还需要存储的原始文件名。

      【讨论】:

        猜你喜欢
        • 2013-05-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-07
        • 2013-03-21
        • 1970-01-01
        • 2016-02-28
        相关资源
        最近更新 更多