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

Функция declarative_base

Функция declarative_base создает базовый класс, от которого наследуются все декларативные модели. Декларативный стиль позволяет описывать таблицы базы данных в виде Python-классов, а связь между классом и таблицей SQLAlchemy устанавливает автоматически. Первым параметром можно передать метаданные metadata, а именованными параметрами - настройки маппера, например cls и constructor.

Синтаксис

declarative_base(metadata=None, cls=object, name='Base', class_registry=None, constructor=<class 'object'>, metaclass=DeclarativeMeta)

Пример

Давайте создадим базовый класс и опишем модель таблицы articles:

from sqlalchemy import create_engine, Column, Integer, String from sqlalchemy.orm import declarative_base Base = declarative_base() class Article(Base): __tablename__ = 'articles' id = Column(Integer, primary_key=True) title = Column(String) text = Column(String) status = Column(String) num = Column(Integer) engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) print(Article.__tablename__) print(Base.metadata.tables.keys())

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

"articles" "dict_keys(['articles'])"

Пример

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

from sqlalchemy import create_engine, Column, Integer, String from sqlalchemy.orm import declarative_base, Session Base = declarative_base() class Article(Base): __tablename__ = 'articles' id = Column(Integer, primary_key=True) title = Column(String) text = Column(String) status = Column(String) num = Column(Integer) engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: article = Article(title='article', text='text', status='draft', num=1) session.add(article) session.commit() res = session.query(Article).all() print([a.title for a in res])

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

['article']

Пример

Давайте передадим свои метаданные в функцию declarative_base:

from sqlalchemy import MetaData, create_engine, Column, Integer, String from sqlalchemy.orm import declarative_base metadata = MetaData() Base = declarative_base(metadata=metadata) class Article(Base): __tablename__ = 'articles' id = Column(Integer, primary_key=True) title = Column(String) text = Column(String) status = Column(String) num = Column(Integer) engine = create_engine('sqlite:///:memory:') metadata.create_all(engine) print(list(metadata.tables))

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

['articles']

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

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