Класс Time
Класс Time представляет тип данных
для хранения времени без даты. При создании
столбца с этим типом данные сохраняются как
часы, минуты, секунды и микросекунды. Первым
параметром передаётся флаг timezone,
который указывает, нужно ли учитывать часовой
пояс. Вторым параметром передаётся
precision, задающий точность долей
секунды.
Синтаксис
Time(timezone=False, precision=None)
Пример
Давайте создадим модель со столбцом типа
Time и сохраним в неё время:
from datetime import time
from sqlalchemy import create_engine, Time
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]
status: Mapped[time] = mapped_column(Time)
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with Session(engine) as session:
article = Article(title='article', status=time(14, 30, 15))
session.add(article)
session.commit()
res = session.query(Article).first()
print(res.status)
Результат выполнения кода:
"14:30:15"
Пример
Давайте сохраним время с микросекундами и точностью до трёх знаков:
from datetime import time
from sqlalchemy import create_engine, Time
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]
status: Mapped[time] = mapped_column(Time(precision=3))
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with Session(engine) as session:
article = Article(title='article', status=time(9, 5, 0, 123456))
session.add(article)
session.commit()
res = session.query(Article).first()
print(res.status)
Результат выполнения кода:
"09:05:00.123456"
Пример
Давайте создадим столбец с учётом часового пояса и сохраним время с зоной:
from datetime import time, timezone, timedelta
from sqlalchemy import create_engine, Time
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]
status: Mapped[time] = mapped_column(Time(timezone=True))
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with Session(engine) as session:
tz = timezone(timedelta(hours=3))
article = Article(title='article', status=time(18, 45, tzinfo=tz))
session.add(article)
session.commit()
res = session.query(Article).first()
print(res.status)
Результат выполнения кода:
"18:45:00+03:00"