Атрибут parent класса ForeignKey
Атрибут parent класса ForeignKey
возвращает объект Column, к которому
привязан данный внешний ключ. Иными словами,
это колонка-владелец внешнего ключа. Атрибут
не принимает параметров и доступен только для
чтения. Его удобно использовать, когда нужно
из одной колонки узнать, к какой таблице она
относится.
Синтаксис
foreign_key.parent
Пример
Давайте создадим таблицу с внешним ключом и
посмотрим на колонку-владельца через атрибут
parent:
from sqlalchemy import ForeignKey, String
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
pass
class User(Base):
__tablename__ = 'users'
id: Mapped[int] = mapped_column(primary_key=True)
name: Mapped[str] = mapped_column(String(50))
class Article(Base):
__tablename__ = 'articles'
id: Mapped[int] = mapped_column(primary_key=True)
title: Mapped[str] = mapped_column(String(100))
user_id: Mapped[int] = mapped_column(ForeignKey('users.id'))
fk = Article.__table__.c.user_id.foreign_keys[0]
print(fk.parent)
Результат выполнения кода:
"articles.user_id"
Пример
Давайте через атрибут parent получим имя
колонки-владельца и имя её таблицы:
from sqlalchemy import ForeignKey, String
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
pass
class User(Base):
__tablename__ = 'users'
id: Mapped[int] = mapped_column(primary_key=True)
name: Mapped[str] = mapped_column(String(50))
class Article(Base):
__tablename__ = 'articles'
id: Mapped[int] = mapped_column(primary_key=True)
title: Mapped[str] = mapped_column(String(100))
user_id: Mapped[int] = mapped_column(ForeignKey('users.id'))
fk = Article.__table__.c.user_id.foreign_keys[0]
print(fk.parent.name)
print(fk.parent.table.name)
Результат выполнения кода:
"user_id"
"articles"
Пример
Давайте переберём все внешние ключи колонки и
для каждого выведем колонку-владельца через
атрибут parent:
from sqlalchemy import ForeignKey, String
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
pass
class User(Base):
__tablename__ = 'users'
id: Mapped[int] = mapped_column(primary_key=True)
name: Mapped[str] = mapped_column(String(50))
class Article(Base):
__tablename__ = 'articles'
id: Mapped[int] = mapped_column(primary_key=True)
title: Mapped[str] = mapped_column(String(100))
user_id: Mapped[int] = mapped_column(ForeignKey('users.id'))
for fk in Article.__table__.c.user_id.foreign_keys:
print(fk.parent)
Результат выполнения кода:
"articles.user_id"
Смотрите также
-
класс
ForeignKey,
который представляет внешний ключ -
атрибут
column,
который возвращает целевую колонку внешнего ключа -
атрибут
name,
который хранит имя ограничения внешнего ключа -
атрибут
ondelete,
который задаёт поведение при удалении связанной строки