Метод append_foreign_key
Метод append_foreign_key класса Column
добавляет объект внешнего ключа ForeignKey
к текущей колонке. Первым параметром метод
принимает объект внешнего ключа. Метод
используется преимущественно во внутренних
механизмах SQLAlchemy и при динамическом
построении схемы, когда колонка уже создана,
а внешний ключ нужно привязать к ней позже.
Синтаксис
Column.append_foreign_key(foreign_key)
Пример
Давайте создадим две таблицы и вручную
добавим внешний ключ к колонке через
метод append_foreign_key:
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)
)
articles.c.user_id.append_foreign_key(ForeignKey('users.id'))
for fk in articles.c.user_id.foreign_keys:
print(fk)
Результат выполнения кода:
"ForeignKey('users.id')"
Пример
Давайте проверим, что внешний ключ попал
в коллекцию foreign_keys колонки и
отобразился в SQL-выражении создания таблицы:
from sqlalchemy import MetaData, Table, Column, Integer, String, ForeignKey
from sqlalchemy.schema import CreateTable
from sqlalchemy.dialects import sqlite
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)
)
articles.c.user_id.append_foreign_key(ForeignKey('users.id'))
print(len(articles.c.user_id.foreign_keys))
print(CreateTable(articles).compile(dialect=sqlite.dialect()))
Результат выполнения кода:
"1"
Итоговый SQL запрос:
CREATE TABLE articles (
id INTEGER NOT NULL,
title VARCHAR,
user_id INTEGER,
PRIMARY KEY (id),
FOREIGN KEY(user_id) REFERENCES users (id)
)
Смотрите также
-
класс
Column,
который представляет колонку таблицы -
метод
references,
который проверяет ссылку колонки на другую -
метод
copy,
который создает копию колонки -
атрибут
table,
который возвращает таблицу колонки