Метод compile класса TypeEngine
Метод compile класса TypeEngine
возвращает диалект-специфичную реализацию
типа данных. Первым параметром метод принимает
объект диалекта dialect, который описывает
особенности конкретной СУБД. Вторым необязательным
параметром передается словарь type_expression,
содержащий дополнительный контекст компиляции.
Метод используется внутри SQLAlchemy при генерации
DDL- и SQL-выражений, но может вызываться и напрямую.
Синтаксис
TypeEngine.compile(dialect, [type_expression])
Пример
Давайте скомпилируем тип Integer для
диалекта SQLite:
from sqlalchemy import Integer
from sqlalchemy.dialects import sqlite
compiled = Integer().compile(dialect=sqlite.dialect())
print(compiled)
Результат выполнения кода:
"INTEGER"
Пример
Давайте скомпилируем тип String с
указанной длиной для диалекта SQLite:
from sqlalchemy import String
from sqlalchemy.dialects import sqlite
compiled = String(50).compile(dialect=sqlite.dialect())
print(compiled)
Результат выполнения кода:
"VARCHAR(50)"
Пример
Давайте скомпилируем один и тот же тип для разных диалектов и сравним результат:
from sqlalchemy import String
from sqlalchemy.dialects import sqlite, postgresql
type_ = String(30)
print(type_.compile(dialect=sqlite.dialect()))
print(type_.compile(dialect=postgresql.dialect()))
Результат выполнения кода:
VARCHAR(30)
VARCHAR(30)
Пример
Давайте скомпилируем тип для колонки модели и посмотрим на итоговый DDL при создании таблицы:
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(primary_key=True)
title: Mapped[str] = mapped_column(String(100))
engine = create_engine('sqlite:///:memory:')
print(CreateTable(Article.__table__).compile(engine))
Итоговый SQL запрос:
CREATE TABLE articles (
id INTEGER NOT NULL,
title VARCHAR(100) NOT NULL,
PRIMARY KEY (id)
)
Смотрите также
-
класс
TypeEngine,
который представляет базовый тип данных -
метод
with_variant,
который создает вариант типа для другого диалекта -
метод
as_generic,
который возвращает обобщенный тип -
метод
copy,
который создает копию типа данных