Атрибут constraints класса Table
Атрибут constraints класса Table возвращает
множество (set) всех ограничений, связанных с таблицей.
В это множество входят объекты PrimaryKeyConstraint,
ForeignKeyConstraint, UniqueConstraint,
CheckConstraint и другие. Атрибут доступен только
для чтения и формируется автоматически при определении
таблицы.
Синтаксис
table.constraints
Пример
Давайте создадим таблицу с первичным ключом и посмотрим на ее ограничения:
from sqlalchemy import Table, Column, Integer, String, MetaData
metadata = MetaData()
articles = Table(
'articles', metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
)
for constraint in articles.constraints:
print(constraint)
Результат выполнения кода:
"PrimaryKeyConstraint(Column('id', Integer(), table=<articles>, primary_key=True, nullable=False))"
Пример
Давайте добавим к таблице уникальное ограничение и ограничение внешнего ключа:
from sqlalchemy import (
Table, Column, Integer, String,
MetaData, ForeignKey, UniqueConstraint
)
metadata = MetaData()
users = Table(
'users', metadata,
Column('id', Integer, primary_key=True),
Column('name', String),
)
articles = Table(
'articles', metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
Column('user_id', Integer, ForeignKey('users.id')),
UniqueConstraint('title', name='uq_articles_title'),
)
for constraint in articles.constraints:
print(type(constraint).__name__)
Результат выполнения кода:
"PrimaryKeyConstraint"
"UniqueConstraint"
"ForeignKeyConstraint"
Пример
Давайте отфильтруем ограничения по типу, чтобы получить только уникальные ограничения:
from sqlalchemy import (
Table, Column, Integer, String,
MetaData, UniqueConstraint
)
metadata = MetaData()
articles = Table(
'articles', metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
UniqueConstraint('title', name='uq_articles_title'),
)
unique = [
c for c in articles.constraints
if isinstance(c, UniqueConstraint)
]
print(unique)
Результат выполнения кода:
"[UniqueConstraint(Column('title', String(), table=<articles>, name='uq_articles_title'))]"
Смотрите также
-
класс
Table,
который представляет таблицу базы данных -
метод
append_constraint,
который добавляет ограничение к таблице -
атрибут
primary_key,
который хранит первичный ключ таблицы -
атрибут
foreign_keys,
который хранит внешние ключи таблицы