Поле BigInteger
Поле BigInteger создает столбец для хранения
больших целых чисел. Оно используется, когда диапазона
обычного Integer недостаточно. В разных СУБД
BigInteger отображается на тип
BIGINT или аналогичный. Первым параметром
можно передать имя столбца, а также дополнительные
опции, такие как primary_key,
nullable, default и другие.
Синтаксис
BigInteger([name], [primary_key], [nullable], [default])
Пример
Давайте создадим таблицу с полем BigInteger
и посмотрим на итоговый SQL-запрос:
from sqlalchemy import create_engine, BigInteger, String
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id: Mapped[int] = mapped_column(BigInteger, primary_key=True)
title: Mapped[str] = mapped_column(String(50))
engine = create_engine('sqlite:///:memory:', echo=True)
Base.metadata.create_all(engine)
Итоговый SQL запрос:
CREATE TABLE articles (
id BIGINT NOT NULL,
title VARCHAR(50) NOT NULL,
PRIMARY KEY (id)
)
Пример
Давайте вставим в таблицу статью с большим значением идентификатора и выведем результат:
from sqlalchemy import create_engine, BigInteger, 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(BigInteger, primary_key=True)
title: Mapped[str] = mapped_column(String(50))
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with Session(engine) as session:
article = Article(id=9223372036854775807, title='article')
session.add(article)
session.commit()
res = session.execute(select(Article.id, Article.title)).all()
print(res)
Результат выполнения кода:
[(9223372036854775807, 'article')]
Пример
Давайте добавим в модель поле num с типом
BigInteger и зададим значение по умолчанию:
from sqlalchemy import create_engine, BigInteger, 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(BigInteger, primary_key=True)
title: Mapped[str] = mapped_column(String(50))
num: Mapped[int] = mapped_column(BigInteger, default=10000000000)
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with Session(engine) as session:
article = Article(id=1, title='article')
session.add(article)
session.commit()
res = session.execute(select(Article.num)).scalar()
print(res)
Результат выполнения кода:
10000000000
Смотрите также
-
поле
Integer,
которое хранит стандартные целые числа -
поле
SmallInteger,
которое хранит небольшие целые числа -
поле
Numeric,
которое хранит точные десятичные числа -
поле
Float,
которое хранит числа с плавающей точкой