Поле Text
Поле Text создает колонку для хранения
текстовых данных произвольной длины. В отличие
от String, типу Text не требуется
указывать максимальную длину: он подходит для
статей, описаний, комментариев и других больших
текстов. Первым параметром можно передать
длину в символах, но для большинства СУБД этот
параметр не обязателен.
Синтаксис
Text(length=None, collation=None)
Пример
Давайте создадим модель с полем Text
для хранения текста статьи:
from sqlalchemy import Text
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
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(Text)
Теперь создадим таблицу и добавим запись:
from sqlalchemy import create_engine, Text, select
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(Text)
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with Session(engine) as session:
article = Article(title='article', text='long text content')
session.add(article)
session.commit()
res = session.scalars(select(Article)).all()
for item in res:
print(item.id, item.title, item.text)
Результат выполнения кода:
"1 article long text content"
Пример
Давайте посмотрим, какой SQL-запрос генерирует
SQLAlchemy при создании таблицы с полем
Text:
from sqlalchemy import create_engine, Text
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)
text: Mapped[str] = mapped_column(Text)
engine = create_engine('sqlite:///:memory:')
print(CreateTable(Article.__table__).compile(engine))
Итоговый SQL запрос:
CREATE TABLE articles (
id INTEGER NOT NULL,
text TEXT NOT NULL,
PRIMARY KEY (id)
)
Смотрите также
-
поле
String,
которое хранит строки с ограничением длины -
поле
UnicodeText,
которое хранит длинный текст в кодировке Unicode -
поле
CLOB,
которое представляет большой текстовый объект -
поле
VARCHAR,
которое хранит строки переменной длины