РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
293 of 711 menu

Класс ForeignKeyConstraint

Класс ForeignKeyConstraint создает ограничение внешнего ключа на уровне таблицы. Первым параметром передается список локальных столбцов, вторым - список целевых столбцов, на которые ссылается внешний ключ. Ограничение обеспечивает ссылочную целостность между таблицами базы данных.

Синтаксис

ForeignKeyConstraint( columns, refcolumns, [name], [ondelete], [onupdate], [deferrable], [initially] )

Пример

Давайте создадим две таблицы и свяжем их через внешний ключ с помощью класса ForeignKeyConstraint:

from sqlalchemy import ( create_engine, MetaData, Table, Column, Integer, String, ForeignKeyConstraint ) engine = create_engine('sqlite:///:memory:') 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('user_id', Integer), Column('title', String), ForeignKeyConstraint( ['user_id'], ['users.id'] ) ) metadata.create_all(engine) for fk in articles.foreign_key_constraints: print(fk)

Результат выполнения кода:

"ForeignKeyConstraint(['user_id'], ['users.id'])"

Пример

Давайте зададим поведение при удалении связанной записи через параметр ondelete:

from sqlalchemy import ( create_engine, MetaData, Table, Column, Integer, String, ForeignKeyConstraint ) engine = create_engine('sqlite:///:memory:') 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('user_id', Integer), Column('title', String), ForeignKeyConstraint( ['user_id'], ['users.id'], ondelete='CASCADE', onupdate='CASCADE' ) ) metadata.create_all(engine) for fk in articles.foreign_key_constraints: print(fk.ondelete) print(fk.onupdate)

Результат выполнения кода:

"CASCADE" "CASCADE"

Пример

Давайте создадим составной внешний ключ из двух столбцов:

from sqlalchemy import ( create_engine, MetaData, Table, Column, Integer, String, ForeignKeyConstraint ) engine = create_engine('sqlite:///:memory:') metadata = MetaData() users = Table( 'users', metadata, Column('id', Integer, primary_key=True), Column('num', Integer, primary_key=True), Column('name', String) ) articles = Table( 'articles', metadata, Column('id', Integer, primary_key=True), Column('user_id', Integer), Column('user_num', Integer), Column('title', String), ForeignKeyConstraint( ['user_id', 'user_num'], ['users.id', 'users.num'] ) ) metadata.create_all(engine) for fk in articles.foreign_key_constraints: print(fk.column_keys) print(fk.elements)

Итоговый SQL запрос:

CREATE TABLE articles ( id INTEGER NOT NULL, user_id INTEGER, user_num INTEGER, title VARCHAR, PRIMARY KEY (id), FOREIGN KEY(user_id, user_num) REFERENCES users (id, num) )

Смотрите также

  • класс PrimaryKeyConstraint,
    который задает первичный ключ таблицы
  • класс UniqueConstraint,
    который задает уникальность значений столбцов
  • класс CheckConstraint,
    который задает условие проверки значений
  • класс Constraint,
    который является базовым классом для ограничений
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить