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

Атрибут __table_args__

Атрибут __table_args__ объявляется внутри декларативной модели и позволяет передать дополнительные параметры для таблицы. Через него задаются ограничения (UniqueConstraint, CheckConstraint), индексы (Index), а также словарь с аргументами конструктора Table, например schema или sqlite_autoincrement. Значением атрибута может быть кортеж или словарь.

Синтаксис

class ModelName(Base): __tablename__ = 'table_name' __table_args__ = (constraint, index, ...) # или __table_args__ = {'schema': 'my_schema'}

Пример

Давайте создадим модель с составным уникальным ограничением через __table_args__:

from sqlalchemy import UniqueConstraint from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' __table_args__ = ( UniqueConstraint('title', 'status', name='uq_title_status'), ) id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] status: Mapped[str] print(Article.__table_args__)

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

(UniqueConstraint(Column('title'), Column('status'), name='uq_title_status'),)

Пример

Давайте добавим проверочное ограничение CheckConstraint и индекс Index:

from sqlalchemy import CheckConstraint, Index from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' __table_args__ = ( CheckConstraint('num > 0', name='ck_num_positive'), Index('ix_articles_title', 'title'), ) id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] num: Mapped[int] for arg in Article.__table_args__: print(arg)

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

CheckConstraint(Column('num'), table=articles, name='ck_num_positive') Index('ix_articles_title', Column('title'), table=articles)

Пример

Давайте передадим словарь с аргументами конструктора Table, указав комментарий к таблице и опцию sqlite_autoincrement:

from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' __table_args__ = { 'sqlite_autoincrement': True, 'comment': 'Articles table', } id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] print(Article.__table__.comment) print(Article.__table__.kwargs)

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

"Articles table" {'sqlite_autoincrement': True}

Пример

Давайте объединим кортеж ограничений и словарь аргументов. Для этого словарь помещается последним элементом кортежа:

from sqlalchemy import CheckConstraint, Index from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' __table_args__ = ( CheckConstraint('num > 0', name='ck_num_positive'), Index('ix_articles_status', 'status'), {'comment': 'Articles table'}, ) id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] status: Mapped[str] num: Mapped[int] print(Article.__table__.comment) print(len(Article.__table__.constraints))

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

"Articles table" 3

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

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