Атрибут tables
Атрибут tables класса MetaData представляет
собой объект FacadeDict, который ведет себя как словарь
и содержит все таблицы, связанные с данным объектом
метаданных. Ключами словаря выступают имена таблиц,
а значениями - объекты Table. Атрибут доступен
только для чтения и обновляется автоматически при
создании новой таблицы через Table или через
декларативные модели.
Синтаксис
metadata.tables
Пример
Давайте создадим объект MetaData и одну таблицу,
после чего выведем содержимое атрибута tables:
from sqlalchemy import MetaData, Table, Column, Integer, String
metadata = MetaData()
articles = Table(
'articles',
metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
Column('text', String),
Column('status', String),
Column('num', Integer),
)
print(metadata.tables)
Результат выполнения кода:
FacadeDict({'articles': Table('articles', MetaData(), Column('id', Integer(), table=<articles>, primary_key=True, nullable=False), Column('title', String(), table=<articles>), Column('text', String(), table=<articles>), Column('status', String(), table=<articles>), Column('num', Integer(), table=<articles>), schema=None)})
Пример
Давайте получим конкретную таблицу из атрибута
tables по ее имени и выведем список колонок:
from sqlalchemy import MetaData, Table, Column, Integer, String
metadata = MetaData()
articles = Table(
'articles',
metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
Column('text', String),
Column('status', String),
Column('num', Integer),
)
table = metadata.tables['articles']
for column in table.columns:
print(column.name)
Результат выполнения кода:
['id', 'title', 'text', 'status', 'num']
Пример
Давайте создадим таблицу через декларативную модель
и проверим, что она автоматически появилась в атрибуте
tables:
from sqlalchemy import Integer, String
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id: Mapped[int] = mapped_column(primary_key=True)
title: Mapped[str] = mapped_column(String)
text: Mapped[str] = mapped_column(String)
status: Mapped[str] = mapped_column(String)
num: Mapped[int] = mapped_column(Integer)
print(list(Base.metadata.tables.keys()))
Результат выполнения кода:
['articles']
Пример
Давайте создадим несколько таблиц и выведем их общее
количество через атрибут tables:
from sqlalchemy import MetaData, Table, Column, Integer, String
metadata = MetaData()
Table(
'articles',
metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
)
Table(
'users',
metadata,
Column('id', Integer, primary_key=True),
Column('name', String),
)
print('Total tables:', len(metadata.tables))
Результат выполнения кода:
"Total tables: 2"
Смотрите также
-
класс
MetaData,
который хранит информацию о таблицах и схемах -
атрибут
sorted_tables,
который возвращает таблицы в порядке их создания -
метод
create_all,
который создает все таблицы в базе данных -
метод
reflect,
который загружает таблицы из существующей базы