Атрибут primary_key класса Mapper
Атрибут primary_key класса Mapper возвращает
кортеж объектов Column, которые составляют
первичный ключ таблицы, связанной с маппируемым
классом. Если первичный ключ составной, кортеж
содержит несколько колонок. Атрибут доступен
только для чтения и вычисляется автоматически
при конфигурации маппера.
Синтаксис
Mapper.primary_key
Пример
Давайте создадим модель с простым первичным ключом
и выведем кортеж колонок через атрибут primary_key:
from sqlalchemy import create_engine, Integer, String
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id: Mapped[int] = mapped_column(Integer, primary_key=True)
title: Mapped[str] = mapped_column(String)
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
mapper = Article.__mapper__
print(mapper.primary_key)
Результат выполнения кода:
(Column('id', Integer(), table=<articles>, primary_key=True, nullable=False),)
Пример
Давайте переберем все колонки первичного ключа и выведем их имена:
from sqlalchemy import create_engine, Integer, String
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id: Mapped[int] = mapped_column(Integer, primary_key=True)
title: Mapped[str] = mapped_column(String)
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
mapper = Article.__mapper__
for column in mapper.primary_key:
print(column.name)
Результат выполнения кода:
"id"
Пример
Давайте рассмотрим составной первичный ключ.
Создадим таблицу articles, где ключ состоит
из колонок id и num:
from sqlalchemy import create_engine, Integer, String
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id: Mapped[int] = mapped_column(Integer, primary_key=True)
num: Mapped[int] = mapped_column(Integer, primary_key=True)
title: Mapped[str] = mapped_column(String)
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
mapper = Article.__mapper__
print(mapper.primary_key)
Результат выполнения кода:
(Column('id', Integer(), table=<articles>, primary_key=True, nullable=False), Column('num', Integer(), table=<articles>, primary_key=True, nullable=False))
Пример
Давайте выведем список имен колонок составного первичного ключа:
from sqlalchemy import create_engine, Integer, String
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id: Mapped[int] = mapped_column(Integer, primary_key=True)
num: Mapped[int] = mapped_column(Integer, primary_key=True)
title: Mapped[str] = mapped_column(String)
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
mapper = Article.__mapper__
names = [column.name for column in mapper.primary_key]
print(names)
Результат выполнения кода:
['id', 'num']
Смотрите также
-
класс
Mapper,
который связывает класс с таблицей базы данных -
атрибут
columns,
который возвращает коллекцию всех колонок маппера -
атрибут
local_table,
который возвращает основную таблицу маппера -
метод
get_property,
который возвращает свойство маппера по имени