Поле SmallInteger
Поле SmallInteger задает целочисленный
столбец, который в базе данных соответствует
типу SMALLINT. Обычно это 16-битное
целое число с диапазоном от -32768 до 32767.
Тип полезен, когда нужно хранить небольшие
числа и экономить место в таблице. Поле
принимает целые значения, а также может
использоваться как часть первичного ключа
или обычного атрибута модели.
Синтаксис
SmallInteger()
Пример
Давайте создадим модель с полем SmallInteger
и посмотрим, как оно работает в таблице:
from sqlalchemy import SmallInteger
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]
num: Mapped[int] = mapped_column(SmallInteger)
Пример
Давайте создадим таблицу и вставим в нее
запись со значением поля SmallInteger:
from sqlalchemy import create_engine, SmallInteger, 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]
num: Mapped[int] = mapped_column(SmallInteger)
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with Session(engine) as session:
article = Article(title='article', num=100)
session.add(article)
session.commit()
res = session.scalars(select(Article)).all()
for item in res:
print(item.title, item.num)
Результат выполнения кода:
"article 100"
Пример
Давайте посмотрим, какой SQL-запрос создает
SQLAlchemy при создании таблицы с полем
SmallInteger:
<+python+>
from sqlalchemy import create_engine, SmallInteger
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)
title: Mapped[str]
num: Mapped[int] = mapped_column(SmallInteger)
engine = create_engine('sqlite:///:memory:')
print(CreateTable(Article.__table__).compile(engine))
<-python+>
Итоговый SQL запрос:
CREATE TABLE articles (
id INTEGER NOT NULL,
title VARCHAR NOT NULL,
num SMALLINT NOT NULL,
PRIMARY KEY (id)
)
Смотрите также
-
поле
Integer,
которое задает обычное целочисленное поле -
поле
BigInteger,
которое задает большое целочисленное поле -
поле
INT,
которое задает SQL-тип INTEGER -
поле
Float,
которое задает поле с плавающей точкой