Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Which SQLAlchemy column type should be used for binary data?

I want to store audio files in my database. I know, for example, that strings would use db.String, integers db.Integer, but not what audio data would use. What data type is used to store this type of data in 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)
like image 438
Brosef Avatar asked Aug 25 '15 22:08

Brosef


People also ask

What is column in SQLAlchemy?

function sqlalchemy.orm. column_property(*columns, **kwargs) Provide a column-level property for use with a mapping. Column-based properties can normally be applied to the mapper's properties dictionary using the Column element directly.

What is nullable SQLAlchemy?

From SQLAlchemy docs: nullable – If set to the default of True, indicates the column will be rendered as allowing NULL, else it's rendered as NOT NULL. This parameter is only used when issuing CREATE TABLE statements.

What is PickleType?

PickleType. Holds Python objects, which are serialized using pickle. SchemaType. Mark a type as possibly requiring schema-level DDL for usage.

What is dialect in SQLAlchemy?

The dialect is the system SQLAlchemy uses to communicate with various types of DBAPI implementations and databases. The sections that follow contain reference documentation and notes specific to the usage of each backend, as well as notes for the various DBAPIs.


1 Answers

When storing binary data, use the LargeBinary type. Despite its name, it is appropriate for any sized binary data.

data = db.Column(db.LargeBinary)

Read the data from the uploaded file in your Flask view.

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

Rather than storing the data in the database, it's typically better to store files in the filesystem, and store the path to the file in the database.

Since you're presumably serving these files, not just storing them, it is much more efficient to serve the files from the filesystem. See this answer for more discussion on serving data from the database.

like image 115
davidism Avatar answered Sep 28 '22 07:09

davidism