Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 9 additions & 5 deletions docs/queries.rst
Original file line number Diff line number Diff line change
Expand Up @@ -116,11 +116,15 @@ Queries in Views

If you write a Flask view function it's often very handy to return a 404
error for missing entries. Because this is a very common idiom,
Flask-SQLAlchemy provides a helper for this exact purpose. Instead of
:meth:`~sqlalchemy.orm.query.Query.get` one can use
:meth:`~Query.get_or_404` and instead of
:meth:`~sqlalchemy.orm.query.Query.first` :meth:`~Query.first_or_404`.
This will raise 404 errors instead of returning `None`::
Flask-SQLAlchemy provides helpers for this exact purpose.

Instead of :meth:`~sqlalchemy.orm.query.Query.get` one can use
:meth:`~Query.get_or_404`, instead of
:meth:`~sqlalchemy.orm.query.Query.first` use :meth:`~Query.first_or_404`,
and instead of :meth:`~sqlalchemy.orm.query.Query.one_or_none` use
:meth:`~Query.one_or_404`.

These methods will raise 404 errors instead of returning `None`::

@app.route('/user/<username>')
def show_user(username):
Expand Down
8 changes: 8 additions & 0 deletions flask_sqlalchemy/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -426,6 +426,14 @@ def first_or_404(self):
if rv is None:
abort(404)
return rv

def one_or_404(self):
"""Like :meth:`one_or_none` but aborts with 404 if not found instead of returning ``None``."""

rv = self.one_or_none()
if rv is None:
abort(404)
return rv

def paginate(self, page=None, per_page=None, error_out=True):
"""Returns ``per_page`` items from page ``page``.
Expand Down