Поле UnicodeText
Поле UnicodeText представляет собой тип данных
для хранения длинных текстовых значений в кодировке
Unicode. В отличие от Unicode, который имеет
ограничение по длине и обычно транслируется в
VARCHAR, тип UnicodeText не имеет
фиксированной длины и на уровне СУБД превращается
в TEXT или CLOB. Это делает его
удобным для хранения статей, описаний, комментариев
и других объемных текстов, которые могут содержать
символы разных языков. Параметров у типа нет -
длина не указывается.
Синтаксис
UnicodeText()
Пример
Давайте создадим модель с полем UnicodeText
и посмотрим, как оно используется в таблице:
from sqlalchemy import create_engine, UnicodeText
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id: Mapped[int] = mapped_column(primary_key=True)
title: Mapped[str]
text: Mapped[str] = mapped_column(UnicodeText)
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with Session(engine) as session:
article = Article(title='article', text='Пример длинного текста на русском языке')
session.add(article)
session.commit()
res = session.query(Article).first()
print(res.title)
print(res.text)
Результат выполнения кода:
"article"
"Пример длинного текста на русском языке"
Пример
Давайте посмотрим, какой SQL-тип получается при
создании таблицы с колонкой UnicodeText:
from sqlalchemy import create_engine, UnicodeText, MetaData, Table, Column, Integer
engine = create_engine('sqlite:///:memory:')
metadata = MetaData()
articles = Table(
'articles',
metadata,
Column('id', Integer, primary_key=True),
Column('text', UnicodeText),
)
print(articles.c.text.type)
print(articles.c.text.type.compile(engine.dialect))
Результат выполнения кода:
"UnicodeText()"
"TEXT"