Поле Boolean
Поле Boolean представляет логический тип данных
и хранит значения True или False.
Параметр create_constraint включает проверочное
ограничение CHECK на уровне базы данных, параметр
name задает имя этого ограничения, а параметр
nullable определяет, допускает ли колонка
значение NULL.
Синтаксис
Boolean(create_constraint=False, name=None, nullable=True)
Пример
Давайте создадим колонку с логическим типом
в таблице articles:
from sqlalchemy import create_engine, Boolean, Integer, String
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id: Mapped[int] = mapped_column(Integer, primary_key=True)
title: Mapped[str] = mapped_column(String)
status: Mapped[bool] = mapped_column(Boolean)
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
print(Article.__table__.c.status.type)
Результат выполнения кода:
"BOOLEAN"
Пример
Давайте вставим запись со значением True
и прочитаем ее обратно:
from sqlalchemy import create_engine, Boolean, Integer, 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(Integer, primary_key=True)
title: Mapped[str] = mapped_column(String)
status: Mapped[bool] = mapped_column(Boolean)
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with Session(engine) as session:
article = Article(title='article', status=True)
session.add(article)
session.commit()
res = session.scalars(select(Article)).all()
print(res[0].status)
Результат выполнения кода:
"True"
Пример
Давайте включим проверочное ограничение параметром
create_constraint:
<+python+>
from sqlalchemy import create_engine, Boolean, Integer, String
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id: Mapped[int] = mapped_column(Integer, primary_key=True)
title: Mapped[str] = mapped_column(String)
status: Mapped[bool] = mapped_column(
Boolean(create_constraint=True, name='status_check')
)
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
print(Article.__table__.c.status.type.create_constraint)
<-python+>
Результат выполнения кода:
"True"