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

Атрибут __tablename__

Атрибут __tablename__ задает имя таблицы в базе данных, с которой связывается декларативный класс. Атрибут объявляется внутри класса-модели и принимает строку с именем таблицы. Если атрибут не указан, SQLAlchemy попытается вывести имя таблицы автоматически, однако на практике его указывают всегда явно.

Атрибут __tablename__ является обязательным для классов, наследующих DeclarativeBase, если только таблица не задается напрямую через атрибут __table__. Значение атрибута попадает в метаданные MetaData и используется при генерации SQL-запросов и при создании таблиц методом create_all.

Синтаксис

class ModelName(Base): __tablename__ = 'table_name'

Пример

Давайте объявим модель Article и свяжем ее с таблицей articles:

from sqlalchemy import 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] print(Article.__tablename__)

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

"articles"

Пример

Давайте убедимся, что имя таблицы попадает в метаданные модели:

from sqlalchemy import 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] text: Mapped[str] status: Mapped[str] num: Mapped[int] print(Article.__table__.name) print(Article.__table__.columns.keys())

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

"articles" ['id', 'title', 'text', 'status', 'num']

Пример

Давайте создадим таблицу в базе данных на основе атрибута __tablename__:

<+python+> from sqlalchemy import 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] engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) from sqlalchemy import inspect inspector = inspect(engine) print(inspector.get_table_names()) <-python+>

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

['articles']

Пример

Давайте посмотрим, какой SQL-запрос генерируется при выборке из модели:

<+python+> from sqlalchemy import create_engine, select from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: stmt = select(Article) print(stmt) <-python+>

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

SELECT articles.id, articles.title FROM articles

Пример

Давайте зададим имя таблицы, отличное от имени класса:

<+python+> from sqlalchemy import 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] text: Mapped[str] status: Mapped[str] num: Mapped[int] engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) from sqlalchemy import inspect inspector = inspect(engine) print(inspector.get_table_names()) <-python+>

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

['articles']

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

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