哪个SQLAlchemy列类型应该用于二进制数据?

时间:2015-08-25 22:15:05

标签: python flask sqlalchemy

我想将音频文件存储在我的数据库中。我知道,例如,字符串将使用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)

2 个答案:

答案 0 :(得分:1)

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

data = db.Column(db.LargeBinary)

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

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

不是将数据存储在数据库中,通常最好将文件存储在文件系统中,并将路径存储到数据库中的文件中

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

答案 1 :(得分:1)

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

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