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

Класс TypeEngine

Класс TypeEngine является фундаментом всей системы типов данных в SQLAlchemy. От него наследуются все конкретные типы, которые используются при описании колонок таблиц и при работе с типами на уровне диалекта СУБД. Класс предоставляет универсальный интерфейс для преобразования значений Python в значения базы данных и обратно, а также для генерации SQL-представления типа. Параметров у самого класса нет - он задаёт лишь общий контракт для наследников.

Синтаксис

from sqlalchemy import TypeEngine class MyType(TypeEngine): pass

Пример

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

from sqlalchemy import TypeEngine class MyType(TypeEngine): pass t = MyType() print(type(t).__mro__[1].__name__)

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

"TypeEngine"

Пример

Давайте используем конкретные типы, унаследованные от TypeEngine, в колонках таблицы и проверим, являются ли они экземплярами базового класса:

from sqlalchemy import Integer, String, TypeEngine from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(Integer, primary_key=True) title: Mapped[str] = mapped_column(String(100)) print(isinstance(Article.__table__.c.id.type, TypeEngine)) print(isinstance(Article.__table__.c.title.type, TypeEngine))

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

True True

Пример

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

from sqlalchemy import Integer, String from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(Integer, primary_key=True) title: Mapped[str] = mapped_column(String(100)) print(Article.__table__.c.id.type) print(Article.__table__.c.title.type)

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

INTEGER VARCHAR(100)

Пример

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

from sqlalchemy import Integer, String, create_engine from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column from sqlalchemy.schema import CreateTable class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(Integer, primary_key=True) title: Mapped[str] = mapped_column(String(100)) status: Mapped[str] = mapped_column(String(20)) engine = create_engine('sqlite:///:memory:') print(CreateTable(Article.__table__).compile(engine))

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

CREATE TABLE articles ( id INTEGER NOT NULL, title VARCHAR(100) NOT NULL, status VARCHAR(20) NOT NULL, PRIMARY KEY (id) )

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

  • класс TypeEngine,
    который является базовым классом всех типов
  • метод with_variant,
    который создаёт вариант типа для другого диалекта
  • метод compile,
    который компилирует тип в SQL-представление
  • атрибут python_type,
    который возвращает Python-тип значения
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить