РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
389 of 711 menu

Поле CHAR

Поле CHAR создает столбец для хранения строк фиксированной длины. Первым параметром передается максимальное количество символов. В отличие от VARCHAR, значения короче заданной длины дополняются пробелами до нужного размера. Тип соответствует SQL-типу CHAR.

Синтаксис

CHAR(length, [collation])

Пример

Давайте создадим таблицу с полем CHAR и вставим в нее строку:

from sqlalchemy import create_engine, CHAR, Integer, select from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(Integer, primary_key=True) status: Mapped[str] = mapped_column(CHAR(5)) engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: article = Article(status='new') session.add(article) session.commit() res = session.execute(select(Article.status)).scalar_one() print(repr(res))

Результат выполнения кода:

'new '

Пример

Давайте посмотрим, какой SQL-запрос генерирует тип CHAR при создании таблицы:

from sqlalchemy import create_engine, CHAR, Integer 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(Integer, primary_key=True) status: Mapped[str] = mapped_column(CHAR(10)) engine = create_engine('sqlite:///:memory:') print(CreateTable(Article.__table__).compile(engine))

Итоговый SQL запрос:

CREATE TABLE articles ( id INTEGER NOT NULL, status CHAR(10), PRIMARY KEY (id) )

Пример

Давайте сравним поведение CHAR и VARCHAR при хранении коротких значений:

from sqlalchemy import create_engine, CHAR, VARCHAR, Integer, select from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(Integer, primary_key=True) code_char: Mapped[str] = mapped_column(CHAR(8)) code_varchar: Mapped[str] = mapped_column(VARCHAR(8)) engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: article = Article(code_char='ab', code_varchar='ab') session.add(article) session.commit() res = session.execute( select(Article.code_char, Article.code_varchar) ).one() print(repr(res.code_char)) print(repr(res.code_varchar))

Результат выполнения кода:

'ab ' 'ab'

Смотрите также

  • тип VARCHAR,
    который хранит строки переменной длины
  • тип String,
    который является общим строковым типом
  • тип Text,
    который хранит строки неограниченной длины
  • тип Unicode,
    который хранит Unicode-строки переменной длины
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить