Метод references
Метод references класса Column возвращает
коллекцию объектов ForeignKey, которые ссылаются
на данную колонку из других таблиц. Метод не принимает
параметров и возвращает объект ReadOnlyColumnCollection,
содержащий все внешние ключи, указывающие на эту колонку.
Метод полезен при анализе связей между таблицами и
построении обратных зависимостей.
Синтаксис
column.references
Пример
Давайте создадим две таблицы, где колонка id
таблицы articles используется как цель внешнего
ключа в таблице comments, и посмотрим результат
работы метода references:
from sqlalchemy import create_engine, Column, Integer, String, ForeignKey
from sqlalchemy.orm import DeclarativeBase
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id = Column(Integer, primary_key=True)
title = Column(String)
class Comment(Base):
__tablename__ = 'comments'
id = Column(Integer, primary_key=True)
text = Column(String)
article_id = Column(Integer, ForeignKey('articles.id'))
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
for fk in Article.__table__.c.id.references:
print(fk)
Результат выполнения кода:
"ForeignKey('articles.id')"
Пример
Давайте проверим, что у колонки без входящих внешних ключей коллекция ссылок пуста:
from sqlalchemy import create_engine, Column, Integer, String, ForeignKey
from sqlalchemy.orm import DeclarativeBase
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id = Column(Integer, primary_key=True)
title = Column(String)
status = Column(String)
class Comment(Base):
__tablename__ = 'comments'
id = Column(Integer, primary_key=True)
text = Column(String)
article_id = Column(Integer, ForeignKey('articles.id'))
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
print(len(Article.__table__.c.status.references))
print(len(Article.__table__.c.id.references))
Результат выполнения кода:
0
1
Пример
Давайте получим имена колонок, которые ссылаются на
articles.id, через атрибут parent каждого
внешнего ключа:
from sqlalchemy import create_engine, Column, Integer, String, ForeignKey
from sqlalchemy.orm import DeclarativeBase
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id = Column(Integer, primary_key=True)
title = Column(String)
class Comment(Base):
__tablename__ = 'comments'
id = Column(Integer, primary_key=True)
text = Column(String)
article_id = Column(Integer, ForeignKey('articles.id'))
class Like(Base):
__tablename__ = 'likes'
id = Column(Integer, primary_key=True)
article_id = Column(Integer, ForeignKey('articles.id'))
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
for fk in Article.__table__.c.id.references:
print(fk.parent)
Результат выполнения кода:
"comments.article_id"
"likes.article_id"
Смотрите также
-
класс
Column,
который представляет колонку таблицы -
метод
append_foreign_key,
который добавляет внешний ключ к колонке -
атрибут
table,
который возвращает таблицу колонки -
атрибут
primary_key,
который указывает, является ли колонка первичным ключом