РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
359 of 643 menu

Метод 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
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить