Атрибут foreign_keys
Атрибут foreign_keys класса Table возвращает коллекцию объектов ForeignKey, которые описывают внешние ключи таблицы. Каждый внешний ключ связывает столбец текущей таблицы со столбцом другой таблицы. Атрибут доступен только для чтения и автоматически обновляется при добавлении столбцов с внешними ключами через append_column или при создании таблицы с ограничениями ForeignKeyConstraint.
Синтаксис
table.foreign_keys
Пример
Давайте создадим таблицу с внешним ключом и посмотрим на атрибут foreign_keys:
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'))
)
print(articles.foreign_keys)
Результат выполнения кода:
"{ForeignKey('users.id')}"
Пример
Давайте переберём все внешние ключи таблицы и выведем информацию о каждом из них:
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'))
)
for fk in articles.foreign_keys:
print(fk.column)
print(fk.parent)
Результат выполнения кода:
"users.id"
"articles.user_id"
Пример
Давайте проверим, как атрибут foreign_keys обновляется при добавлении столбца с внешним ключом через append_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)
)
print(len(articles.foreign_keys))
articles.append_column(Column('user_id', Integer, ForeignKey('users.id')))
print(len(articles.foreign_keys))
Результат выполнения кода:
"0"
"1"
Пример
Давайте получим таблицу, на которую ссылается внешний ключ, через атрибут 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'))
)
for fk in articles.foreign_keys:
print(fk.column.table.name)
Результат выполнения кода:
"users"
Смотрите также
-
класс
Table,
который представляет таблицу базы данных -
атрибут
columns,
который возвращает коллекцию столбцов таблицы -
атрибут
primary_key,
который возвращает первичный ключ таблицы -
атрибут
constraints,
который возвращает коллекцию ограничений таблицы