Класс PrimaryKeyConstraint
Класс PrimaryKeyConstraint создает ограничение
первичного ключа для таблицы. Первым параметром
передаются имена столбцов, входящих в состав
первичного ключа. Дополнительно можно задать имя
ограничения параметром name. Первичный ключ
обеспечивает уникальность каждой строки таблицы и
не допускает значения NULL в своих столбцах.
Синтаксис
PrimaryKeyConstraint(column1, column2, [name])
Пример
Давайте создадим таблицу с первичным ключом из одного столбца:
from sqlalchemy import MetaData, Table, Column, Integer, String, PrimaryKeyConstraint
metadata = MetaData()
articles = Table(
'articles', metadata,
Column('id', Integer),
Column('title', String),
PrimaryKeyConstraint('id', name='pk_articles_id')
)
for constraint in articles.constraints:
print(constraint)
Результат выполнения кода:
"PrimaryKeyConstraint(Column('id', Integer(), table=<articles>, primary_key=True, nullable=False), name='pk_articles_id')"
Пример
Давайте создадим составной первичный ключ из двух столбцов:
from sqlalchemy import MetaData, Table, Column, Integer, String, PrimaryKeyConstraint
metadata = MetaData()
articles = Table(
'articles', metadata,
Column('id', Integer),
Column('num', Integer),
Column('title', String),
PrimaryKeyConstraint('id', 'num', name='pk_articles_id_num')
)
print(articles.primary_key)
Результат выполнения кода:
"PrimaryKeyConstraint(Column('id', Integer(), table=<articles>, primary_key=True, nullable=False), Column('num', Integer(), table=<articles>, primary_key=True, nullable=False), name='pk_articles_id_num')"
Пример
Давайте посмотрим, какой SQL-запрос генерируется при создании таблицы с первичным ключом:
from sqlalchemy import MetaData, Table, Column, Integer, String, PrimaryKeyConstraint
from sqlalchemy.schema import CreateTable
from sqlalchemy.dialects import sqlite
metadata = MetaData()
articles = Table(
'articles', metadata,
Column('id', Integer),
Column('title', String),
PrimaryKeyConstraint('id', name='pk_articles_id')
)
print(CreateTable(articles).compile(dialect=sqlite.dialect()))
Итоговый SQL запрос:
CREATE TABLE articles (
id INTEGER NOT NULL,
title VARCHAR,
CONSTRAINT pk_articles_id PRIMARY KEY (id)
)
Пример
Давайте создадим модель с составным первичным
ключом через класс PrimaryKeyConstraint:
from sqlalchemy import Integer, String, PrimaryKeyConstraint
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
__table_args__ = (
PrimaryKeyConstraint('id', 'num', name='pk_articles_id_num'),
)
id: Mapped[int] = mapped_column(Integer)
num: Mapped[int] = mapped_column(Integer)
title: Mapped[str] = mapped_column(String)
print(Article.__table__.primary_key)
Результат выполнения кода:
"PrimaryKeyConstraint(Column('id', Integer(), table=<articles>, primary_key=True, nullable=False), Column('num', Integer(), table=<articles>, primary_key=True, nullable=False), name='pk_articles_id_num')"
Смотрите также
-
класс
Constraint,
который является базовым классом для всех ограничений -
класс
UniqueConstraint,
который задает ограничение уникальности -
класс
ForeignKeyConstraint,
который задает ограничение внешнего ключа -
класс
CheckConstraint,
который задает проверочное ограничение