我想将音频文件存储在我的数据库中。我知道,例如,字符串将使用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)
答案 0 :(得分:1)
存储二进制数据时,请使用LargeBinary
类型。尽管它的名称,它适用于任何大小的二进制数据。
data = db.Column(db.LargeBinary)
在Flask视图中读取上传文件中的数据。
audio.data = request.files['data'].read()
不是将数据存储在数据库中,通常最好将文件存储在文件系统中,并将路径存储到数据库中的文件中
由于您可能会提供这些文件,而不仅仅是存储它们,因此从文件系统提供文件效率要高得多。有关从数据库提供数据的更多讨论,请参阅this answer。
答案 1 :(得分:1)
我不建议将音频文件存储在数据库中,您应该将它们存储在文件中,然后将文件路径存储在数据库中,this这个帖子讨论了将二进制数据存储在数据库中。
所以当上传文件时,您可以使用数据库行的id作为文件名,然后将其从磁盘读回客户端。这也允许在流式传输音频时更容易部分读取文件(HTTP 206),如果您使用多种音频格式,还需要将mime类型的音频存储在数据库中,如果您需要保留您需要存储的原始文件名。