Поле VARCHAR
Тип VARCHAR задает строковый столбец
переменной длины. Первым параметром передается
максимальная длина строки в символах. Тип
используется для хранения коротких и средних
текстовых значений, таких как имена, заголовки
и статусы.
Класс VARCHAR наследуется от типа
String и отличается тем, что всегда
создает в базе данных тип с явно указанной
длиной. Параметр length задает предел
символов, а параметр collation управляет
правилами сравнения строк.
Синтаксис
VARCHAR(length, [collation])
Пример
Давайте создадим таблицу с полем типа
VARCHAR и посмотрим на итоговый
SQL-запрос создания таблицы:
from sqlalchemy import VARCHAR, Integer, MetaData, Table, Column
metadata = MetaData()
articles = Table(
'articles',
metadata,
Column('id', Integer, primary_key=True),
Column('title', VARCHAR(100)),
Column('status', VARCHAR(20)),
)
print(articles.c.title.type)
print(articles.c.status.type)
Результат выполнения кода:
"VARCHAR(100)"
"VARCHAR(20)"
Пример
Давайте воспользуемся типом VARCHAR в
декларативной модели и вставим несколько строк:
from sqlalchemy import VARCHAR, Integer, create_engine
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)
title: Mapped[str] = mapped_column(VARCHAR(100))
status: Mapped[str] = mapped_column(VARCHAR(20))
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with Session(engine) as session:
session.add_all([
Article(title='article 1', status='published'),
Article(title='article 2', status='draft'),
])
session.commit()
res = session.query(Article).all()
for article in res:
print(article.id, article.title, article.status)
Результат выполнения кода:
"1 article 1 published"
"2 article 2 draft"
Пример
Давайте посмотрим, какой SQL-запрос генерирует
SQLAlchemy при создании таблицы с полем
VARCHAR:
from sqlalchemy import VARCHAR, Integer, MetaData, Table, Column
from sqlalchemy.schema import CreateTable
from sqlalchemy.dialects import sqlite
metadata = MetaData()
articles = Table(
'articles',
metadata,
Column('id', Integer, primary_key=True),
Column('title', VARCHAR(100)),
)
print(CreateTable(articles).compile(dialect=sqlite.dialect()))
Итоговый SQL запрос:
CREATE TABLE articles (
id INTEGER NOT NULL,
title VARCHAR(100),
PRIMARY KEY (id)
)