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

Класс CheckConstraint

Класс CheckConstraint создает проверочное ограничение (CHECK) на колонку или таблицу. Первым параметром передается SQL-выражение, которое должно возвращать истину для каждой строки таблицы. Ограничение можно задать как при описании колонки, так и отдельно в атрибуте __table_args__. Параметр name задает имя ограничения, а параметр deferrable управляет отложенной проверкой.

Синтаксис

CheckConstraint(sqltext, [name], [deferrable])

Пример

Давайте создадим таблицу articles с проверочным ограничением на колонку status, которое разрешает только значения 'draft', 'published' и 'archived':

from sqlalchemy import create_engine, CheckConstraint, Integer, String from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] = mapped_column(String(100)) status: Mapped[str] = mapped_column( String(20), CheckConstraint( "status IN ('draft', 'published', 'archived')", name='check_article_status' ) ) engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) print(Article.__table__.constraints)

Результат выполнения кода:

{CheckConstraint('status IN (\'draft\', \'published\', \'archived\')')}

Пример

Давайте зададим проверочное ограничение через атрибут __table_args__, чтобы проверить числовое поле num на положительное значение:

from sqlalchemy import create_engine, CheckConstraint, Integer, String from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' __table_args__ = ( CheckConstraint('num > 0', name='check_num_positive'), ) id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] = mapped_column(String(100)) num: Mapped[int] = mapped_column(Integer) engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) for constraint in Article.__table__.constraints: print(constraint.name)

Результат выполнения кода:

"check_num_positive"

Пример

Давайте посмотрим итоговый SQL-запрос создания таблицы с проверочным ограничением:

from sqlalchemy import create_engine, CheckConstraint, Integer, String from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column from sqlalchemy.schema import CreateTable class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] = mapped_column(String(100)) status: Mapped[str] = mapped_column( String(20), CheckConstraint( "status IN ('draft', 'published')", name='check_article_status' ) ) engine = create_engine('sqlite:///:memory:') print(CreateTable(Article.__table__).compile(engine))

Итоговый SQL запрос:

CREATE TABLE articles ( id INTEGER NOT NULL, title VARCHAR(100) NOT NULL, status VARCHAR(20) NOT NULL, PRIMARY KEY (id), CONSTRAINT check_article_status CHECK (status IN ('draft', 'published')) )

Смотрите также

  • класс Constraint,
    который является базовым классом для всех ограничений
  • класс PrimaryKeyConstraint,
    который задает первичный ключ таблицы
  • класс ForeignKeyConstraint,
    который задает внешний ключ таблицы
  • класс UniqueConstraint,
    который задает ограничение уникальности
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить