二进制数据应该使用哪种 SQLAlchemy 列类型?

Bro*_*sef 3 python sqlalchemy flask

我想将音频文件存储在我的数据库中。例如,我知道字符串会使用db.String, integers 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)
Run Code Online (Sandbox Code Playgroud)

dav*_*ism 5

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

data = db.Column(db.LargeBinary)
Run Code Online (Sandbox Code Playgroud)

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

audio.data = request.files['data'].read()
Run Code Online (Sandbox Code Playgroud)

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

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


kyl*_*e k 5

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

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