Поле DateTime
Тип DateTime предназначен для хранения
даты и времени в базе данных. При создании
колонки с этим типом можно указать параметр
timezone, который определяет, будет ли
храниться информация о часовом поясе.
В Python значения представляются объектами
datetime.datetime.
Синтаксис
from sqlalchemy import DateTime
DateTime(timezone=False)
Пример
Давайте создадим таблицу с колонкой типа
DateTime и сохраним в нее текущее
время:
from datetime import datetime
from sqlalchemy import create_engine, DateTime, String
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] = mapped_column(String(50))
created_at: Mapped[datetime] = mapped_column(DateTime)
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with Session(engine) as session:
article = Article(title='article', created_at=datetime(2024, 1, 15, 10, 30, 0))
session.add(article)
session.commit()
res = session.query(Article).first()
print(res.created_at)
Результат выполнения кода:
"2024-01-15 10:30:00"
Пример
Давайте включим поддержку часового пояса
параметром timezone:
from datetime import datetime, timezone
from sqlalchemy import create_engine, DateTime, String
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] = mapped_column(String(50))
created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True))
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with Session(engine) as session:
article = Article(
title='article',
created_at=datetime(2024, 1, 15, 10, 30, 0, tzinfo=timezone.utc)
)
session.add(article)
session.commit()
res = session.query(Article).first()
print(res.created_at)
Результат выполнения кода:
"2024-01-15 10:30:00+00:00"
Пример
Давайте используем автозаполнение времени
создания записи через функцию func.now:
from datetime import datetime
from sqlalchemy import create_engine, DateTime, String, func
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] = mapped_column(String(50))
created_at: Mapped[datetime] = mapped_column(DateTime, server_default=func.now())
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with Session(engine) as session:
article = Article(title='article')
session.add(article)
session.commit()
res = session.query(Article).first()
print(res.created_at is not None)
Результат выполнения кода:
True