Класс String
Класс String представляет строковый
тип данных и используется при описании
колонок таблиц. Первым параметром
передается длина строки в символах,
вторым - флаг collation для указания
правил сравнения строк. Если длина не
указана, СУБД использует собственное
значение по умолчанию.
Синтаксис
String(length, [collation])
Пример
Давайте создадим колонку с типом
String и длиной в 100 символов:
from sqlalchemy import String
title_type = String(100)
print(title_type)
Результат выполнения кода:
"VARCHAR(100)"
Пример
Давайте опишем модель с колонкой типа
String и создадим таблицу:
from sqlalchemy import create_engine, String
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] = mapped_column(String(100))
text: Mapped[str] = mapped_column(String(255))
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
print(Article.__table__.columns['title'].type)
Результат выполнения кода:
"VARCHAR(100)"
Итоговый SQL запрос:
CREATE TABLE articles (
id INTEGER NOT NULL,
title VARCHAR(100) NOT NULL,
text VARCHAR(255) NOT NULL,
PRIMARY KEY (id)
)
Пример
Давайте вставим строковые данные в таблицу и прочитаем их обратно:
from sqlalchemy import create_engine, String, 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] = mapped_column(String(100))
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with Session(engine) as session:
session.add(Article(title='article 1'))
session.add(Article(title='article 2'))
session.commit()
res = session.scalars(select(Article.title)).all()
print(res)
Результат выполнения кода:
['article 1', 'article 2']