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

Атрибут sorted_tables класса MetaData

Атрибут sorted_tables класса MetaData возвращает список объектов Table, отсортированных в порядке, при котором таблицы с внешними ключами располагаются после таблиц, на которые они ссылаются. Это особенно важно при создании и удалении таблиц в правильной последовательности. Атрибут не принимает параметров и доступен только для чтения.

Синтаксис

metadata.sorted_tables

Пример

Давайте создадим две связанные таблицы и посмотрим, в каком порядке они окажутся в атрибуте sorted_tables. Сначала объявим таблицу users, затем таблицу articles, которая ссылается на неё через внешний ключ:

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([table.name for table in metadata.sorted_tables])

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

['users', 'articles']

Пример

Даже если таблица с внешним ключом была определена раньше, атрибут sorted_tables всё равно расставит их в правильном порядке. Проверим это, объявив articles перед users:

from sqlalchemy import MetaData, Table, Column, Integer, String, ForeignKey metadata = MetaData() articles = Table( 'articles', metadata, Column('id', Integer, primary_key=True), Column('title', String), Column('user_id', Integer, ForeignKey('users.id')) ) users = Table( 'users', metadata, Column('id', Integer, primary_key=True), Column('name', String) ) print([table.name for table in metadata.sorted_tables])

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

['users', 'articles']

Пример

Атрибут sorted_tables удобно использовать для последовательного создания таблиц в базе данных. Создадим обе таблицы в правильном порядке:

from sqlalchemy import MetaData, Table, Column, Integer, String, ForeignKey, create_engine 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')) ) engine = create_engine('sqlite:///:memory:') with engine.connect() as conn: for table in metadata.sorted_tables: table.create(conn) print(f"Table {table.name} created")

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

"Table users created" "Table articles created"

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

  • класс MetaData,
    который хранит информацию о таблицах и схеме
  • атрибут tables,
    который содержит словарь всех таблиц
  • метод create_all,
    который создает все таблицы в базе данных
  • метод drop_all,
    который удаляет все таблицы в правильном порядке
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить