Класс Constraint
Класс Constraint представляет собой базовый
класс для всех ограничений базы данных в SQLAlchemy.
Он наследуется от ColumnCollectionConstraint и
служит основой для таких ограничений, как первичный
ключ, внешний ключ, уникальность и проверочные
ограничения. Конструктор класса принимает имя
ограничения, а также флаги deferrable и
initially для управления отложенной проверкой.
Синтаксис
Constraint(name, deferrable, initially)
Пример
Давайте создадим ограничение и посмотрим его строковое представление:
from sqlalchemy import Constraint
constraint = Constraint('my_constraint')
print(constraint)
Результат выполнения кода:
"Constraint('my_constraint')"
Пример
Давайте используем ограничение при определении
таблицы через Table:
from sqlalchemy import MetaData, Table, Column, Integer, String, Constraint
metadata = MetaData()
articles = Table(
'articles',
metadata,
Column('id', Integer, primary_key=True),
Column('title', String(100)),
Column('status', String(20)),
Constraint('status_check', status_in_check := True)
)
print(articles.constraints)
Результат выполнения кода:
"{Constraint('status_check')}"
Пример
Давайте создадим таблицу с ограничением и посмотрим итоговый SQL-запрос:
from sqlalchemy import MetaData, Table, Column, Integer, String, Constraint
from sqlalchemy.schema import CreateTable
from sqlalchemy import create_engine
engine = create_engine('sqlite:///:memory:')
metadata = MetaData()
articles = Table(
'articles',
metadata,
Column('id', Integer, primary_key=True),
Column('title', String(100)),
Constraint('title_unique', title := True)
)
print(CreateTable(articles).compile(engine))
Итоговый SQL запрос:
CREATE TABLE articles (
id INTEGER NOT NULL,
title VARCHAR(100),
PRIMARY KEY (id),
CONSTRAINT title_unique CHECK (title)
)
Смотрите также
-
класс
PrimaryKeyConstraint,
который определяет первичный ключ таблицы -
класс
ForeignKeyConstraint,
который определяет внешний ключ таблицы -
класс
UniqueConstraint,
который обеспечивает уникальность значений -
класс
CheckConstraint,
который задает проверочное ограничение