Атрибут type класса Column
Атрибут type класса Column хранит объект типа данных,
который назначен колонке. Этот атрибут доступен только для чтения
и возвращает экземпляр класса типа, например Integer,
String, Text или Boolean. Тип данных
определяет, как значения колонки преобразуются в SQL-типы
конкретной СУБД.
Синтаксис
column.type
Пример
Давайте создадим таблицу с колонкой типа Integer
и выведем ее тип:
from sqlalchemy import create_engine, MetaData, Table, Column, Integer
engine = create_engine('sqlite:///:memory:')
metadata = MetaData()
articles = Table(
'articles',
metadata,
Column('id', Integer, primary_key=True)
)
print(articles.c.id.type)
Результат выполнения кода:
INTEGER
Пример
Давайте посмотрим тип колонки String с указанной длиной:
from sqlalchemy import create_engine, MetaData, Table, Column, String
engine = create_engine('sqlite:///:memory:')
metadata = MetaData()
articles = Table(
'articles',
metadata,
Column('title', String(100))
)
print(articles.c.title.type)
Результат выполнения кода:
VARCHAR(100)
Пример
Давайте сравним атрибут type с классом типа через
isinstance для проверки соответствия:
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String
engine = create_engine('sqlite:///:memory:')
metadata = MetaData()
articles = Table(
'articles',
metadata,
Column('id', Integer, primary_key=True),
Column('title', String(255))
)
print(isinstance(articles.c.id.type, Integer))
print(isinstance(articles.c.title.type, String))
Результат выполнения кода:
True
True
Пример
Давайте используем атрибут type вместе с
mapped_column в декларативной модели:
from sqlalchemy import create_engine, String, Integer
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
engine = create_engine('sqlite:///:memory:')
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id: Mapped[int] = mapped_column(Integer, primary_key=True)
title: Mapped[str] = mapped_column(String(200))
print(Article.__table__.c.id.type)
print(Article.__table__.c.title.type)
Результат выполнения кода:
INTEGER
VARCHAR(200)