Метод get_referent
Метод get_referent класса ForeignKey возвращает объект
Column, на который ссылается данный внешний ключ.
Метод принимает один параметр table - объект таблицы,
к которой относится внешний ключ. Возвращается колонка
из целевой таблицы, указанной в определении внешнего ключа.
Синтаксис
foreign_key.get_referent(table)
Пример
Давайте создадим две таблицы, связанные внешним ключом, и получим колонку, на которую ссылается внешний ключ:
from sqlalchemy import Table, Column, Integer, String, MetaData, 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]
referent = fk.get_referent(articles)
print(referent)
Результат выполнения кода:
"users.id"
Пример
Давайте выведем имя таблицы и имя колонки, на которую ссылается внешний ключ:
from sqlalchemy import Table, Column, Integer, String, MetaData, 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]
referent = fk.get_referent(articles)
print(referent.table.name)
print(referent.name)
Результат выполнения кода:
"users"
"id"
Пример
Давайте используем метод get_referent вместе с методом
references для проверки связи между колонками:
from sqlalchemy import Table, Column, Integer, String, MetaData, 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]
referent = fk.get_referent(articles)
is_same = fk.references(referent)
print(is_same)
Результат выполнения кода:
"True"
Смотрите также
-
класс
ForeignKey,
который представляет внешний ключ -
метод
references,
который проверяет ссылку на колонку -
атрибут
column,
который хранит колонку внешнего ключа -
атрибут
parent,
который хранит родительскую таблицу