Атрибут __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__:
Результат выполнения кода:
['articles']
Пример
Давайте посмотрим, какой SQL-запрос генерируется при выборке из модели:
Итоговый SQL запрос:
SELECT articles.id, articles.title
FROM articles
Пример
Давайте зададим имя таблицы, отличное от имени класса:
Результат выполнения кода:
['articles']
Смотрите также
-
класс
DeclarativeBase,
который служит базой для декларативных моделей -
атрибут
__table__,
который хранит объект таблицы модели -
атрибут
__table_args__,
который задает дополнительные параметры таблицы -
функцию
mapped_column,
которая объявляет колонки модели