SQLAlchemy¶
If you use SQLAlchemy to store data in a database you can take advantage of the
bundled flask_store.sqla.FlaskStoreType
which will take a lot of the
cruft away for you.
Note
In the following examples we are assuming you have your application setup using the application factory pattern. We will also not show the application factory method.
Model¶
As normal you would use Flask-SQLAlchemy to define your model but you would use
the flask_store.sqla.FlaskStoreType
type when defining the field type
for the field you want to store the file path too.
from flask_store.sqla import FlaskStoreType
from yourapp.ext import db
class MyModel(db.Model):
field = db.Column(FlaskStoreType(128, location='/some/where'))
This will act as a standard unicode string field. You do not need to pass a
max_length
integer as we have here as this will default to 256
.
The location
keyword argument we have passed as an optional relative
path to where your file should be saved too from the STORE_PATH
defined
in your Flask Application Configuration as described in the Quick Start
guide.
Saving¶
When wanting to save the file you just need to set the attribute to be the instance of the request file uploaded, this will save the file to the location.
from yourapp import create_app
from yourapp.ext import db
from yourapp.models import MyModel
app = create_app()
@route('/foo')
def foo():
foo = MyModel()
foo.field = request.files.get('foo')
db.session.add(foo)
db.session.commit()
return foo.absolute_url
Accessing¶
When accessing an object the relative path stored in the database will be automatically converted to a store provider instance. This will give you access to the object:
from yourapp import create_app
from yourapp.ext import db
from yourapp.models import MyModel
app = create_app()
@route('/bar')
def foo():
foo = MyModel.query.get(1)
return foo.absolute_url