Тип TIMESTAMP
Тип TIMESTAMP представляет собой SQL-тип
для хранения даты и времени в формате
YYYY-MM-DD HH:MM:SS. В отличие от типа
DateTime, тип TIMESTAMP привязан к
конкретному диалекту СУБД и позволяет задавать
параметры timezone и server_default
для автоматической генерации значений на стороне
сервера. Первым параметром передается флаг
timezone, который указывает, нужно ли
хранить информацию о часовом поясе.
Синтаксис
TIMESTAMP(timezone=False)
Пример
Давайте создадим модель с полем типа
TIMESTAMP и посмотрим, как оно будет
выглядеть в DDL-запросе:
from sqlalchemy import TIMESTAMP, Integer, String
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(Integer, primary_key=True)
title: Mapped[str] = mapped_column(String(100))
created_at: Mapped[str] = mapped_column(TIMESTAMP)
print(CreateTable(Article.__table__))
Итоговый SQL запрос:
CREATE TABLE articles (
id INTEGER NOT NULL,
title VARCHAR(100) NOT NULL,
created_at TIMESTAMP NOT NULL,
PRIMARY KEY (id)
)
Пример
Давайте добавим автоматическое заполнение
метки времени при вставке записи с помощью
параметра server_default:
from datetime import datetime
from sqlalchemy import TIMESTAMP, Integer, String, create_engine, text
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(100))
created_at: Mapped[datetime] = mapped_column(
TIMESTAMP,
server_default=text('CURRENT_TIMESTAMP')
)
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with Session(engine) as session:
article = Article(title='article')
session.add(article)
session.commit()
session.refresh(article)
print(article.created_at)
Результат выполнения кода:
"2026-09-10 12:34:56"
Пример
Давайте включим поддержку часового пояса
параметром timezone и посмотрим на
итоговый DDL-запрос:
from datetime import datetime
from sqlalchemy import TIMESTAMP, Integer, String
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(Integer, primary_key=True)
title: Mapped[str] = mapped_column(String(100))
updated_at: Mapped[datetime] = mapped_column(TIMESTAMP(timezone=True))
print(CreateTable(Article.__table__))
Итоговый SQL запрос:
CREATE TABLE articles (
id INTEGER NOT NULL,
title VARCHAR(100) NOT NULL,
updated_at TIMESTAMP WITH TIME ZONE NOT NULL,
PRIMARY KEY (id)
)