Атрибут column класса ForeignKey
Атрибут column класса ForeignKey возвращает
объект Column, на который ссылается данный внешний
ключ. Это позволяет получить доступ к метаданным
целевой колонки: ее имени, таблице, типу и другим
свойствам. Атрибут доступен только после того, как
внешний ключ был связан с целевой таблицей, то есть
после определения всех таблиц в метаданных.
Синтаксис
foreign_key.column
Пример
Давайте создадим две таблицы, связанные внешним
ключом, и получим целевую колонку через атрибут
column:
from sqlalchemy import MetaData, Table, Column, Integer, String, ForeignKey
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'))
)
fk = articles.c.user_id.foreign_keys[0]
print(fk.column)
Результат выполнения кода:
"users.id"
Пример
Давайте получим имя целевой таблицы и имя целевой
колонки через атрибут column:
from sqlalchemy import MetaData, Table, Column, Integer, String, ForeignKey
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'))
)
fk = articles.c.user_id.foreign_keys[0]
target_column = fk.column
print(target_column.name)
print(target_column.table.name)
Результат выполнения кода:
"id"
"users"
Пример
Давайте используем атрибут column вместе с
ORM-моделями для получения целевой колонки:
from sqlalchemy import ForeignKey, Integer, 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)
class Article(Base):
__tablename__ = 'articles'
id: Mapped[int] = mapped_column(primary_key=True)
title: Mapped[str] = mapped_column(String)
user_id: Mapped[int] = mapped_column(ForeignKey('users.id'))
fk = Article.__table__.c.user_id.foreign_keys[0]
print(fk.column)
print(fk.column.name)
Результат выполнения кода:
"users.id"
"id"
Смотрите также
-
класс
ForeignKey,
который представляет внешний ключ -
метод
references,
который возвращает целевую таблицу внешнего ключа -
метод
get_referent,
который возвращает целевую таблицу для внешнего ключа -
атрибут
parent,
который возвращает родительскую таблицу внешнего ключа