Метод one_or_404
Метод one_or_404 применяется к запросу
SQLAlchemy и возвращает ровно одну запись
из базы данных. Если запись не найдена или
найдено больше одной записи, выбрасывается
исключение. Первым параметром передаётся
объект запроса, вторым - описание ошибки.
Метод удобен для обработчиков Flask, так как
автоматически возвращает страницу 404.
Синтаксис
db.one_or_404(select, [description])
Пример
Давайте получим пользователя по идентификатору и вернём его имя:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50))
@app.route('/user/<int:user_id>')
def user(user_id):
user = db.one_or_404(db.select(User).filter_by(id=user_id))
return user.name
Результат выполнения кода для адреса /user/1:
abcde
Пример
Давайте добавим собственное описание ошибки, которое будет показано при отсутствии записи:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50))
@app.route('/user/<int:user_id>')
def user(user_id):
user = db.one_or_404(
db.select(User).filter_by(id=user_id),
description='User not found'
)
return user.name
Результат выполнения кода для несуществующего адреса /user/999:
User not found
Смотрите также
-
метод
get_or_404,
который возвращает запись по первичному ключу или ошибку 404 -
метод
first_or_404,
который возвращает первую запись или ошибку 404 -
метод
paginate,
который возвращает записи с постраничной навигацией -
класс
SQLAlchemy,
который интегрирует SQLAlchemy в приложение Flask