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

Атрибут __table__

Атрибут __table__ доступен у любого декларативного класса и возвращает объект Table, который SQLAlchemy автоматически создает на основе атрибута __tablename__ и описанных колонок. Через этот атрибут можно получить доступ к метаданным таблицы: ее имени, колонкам, ограничениям, схеме. Атрибут доступен как на самом классе, так и на его экземплярах.

Синтаксис

Model.__table__

Пример

Давайте создадим модель и получим имя ее таблицы через атрибут __table__:

from sqlalchemy import String, Integer 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(100)) text: Mapped[str] = mapped_column(String(255)) print(Article.__table__) print(Article.__table__.name)

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

"Table('articles', MetaData(), Column('id', Integer(), table=<articles>, primary_key=True, nullable=False), Column('title', String(length=100), table=<articles>, nullable=False), Column('text', String(length=255), table=<articles>, nullable=False), schema=None)" "articles"

Пример

Давайте переберем колонки таблицы через атрибут __table__:

from sqlalchemy import 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(100)) status: Mapped[str] = mapped_column(String(50)) for column in Article.__table__.columns: print(column.name, column.type)

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

"id Integer()" "title String(length=100)" "status String(length=50)"

Пример

Давайте получим объект колонки по имени через атрибут __table__ и выведем ее тип:

from sqlalchemy import 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) num: Mapped[int] title: Mapped[str] = mapped_column(String(100)) column = Article.__table__.c.num print(column) print(column.type)

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

"articles.num" "Integer()"

Пример

Давайте создадим таблицу в базе данных через метод create_all, используя метаданные из атрибута __table__:

from sqlalchemy import String, create_engine 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(100)) text: Mapped[str] = mapped_column(String(255)) engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) print(Article.__table__.metadata is Base.metadata)

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

"True"

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

  • атрибут __tablename__,
    который задает имя таблицы модели
  • атрибут __table_args__,
    который задает дополнительные аргументы таблицы
  • класс DeclarativeBase,
    который является базой декларативных моделей
  • функцию mapped_column,
    которая описывает колонку модели
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить