Поле Date
Тип Date в SQLAlchemy представляет
собой колонку для хранения даты без
времени. Принимает значения объекта
datetime.date из стандартной
библиотеки Python. В качестве параметров
можно передать timezone для
учета часового пояса.
Синтаксис
from sqlalchemy import Date
Date([timezone])
Пример
Давайте создадим таблицу с колонкой
типа Date и вставим в нее
значение:
from datetime import date
from sqlalchemy import create_engine, Date, Integer, String
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)
published: Mapped[date] = mapped_column(Date)
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with Session(engine) as session:
article = Article(
title='article',
published=date(2024, 5, 17)
)
session.add(article)
session.commit()
res = session.query(Article).first()
print(res.published)
Результат выполнения кода:
"2024-05-17"
Пример
Давайте отфильтруем записи по конкретной дате:
from datetime import date
from sqlalchemy import create_engine, Date, 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)
published: Mapped[date] = mapped_column(Date)
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with Session(engine) as session:
session.add_all([
Article(title='article 1', published=date(2024, 1, 1)),
Article(title='article 2', published=date(2024, 5, 17)),
Article(title='article 3', published=date(2024, 5, 17)),
])
session.commit()
stmt = select(Article).where(Article.published == date(2024, 5, 17))
res = session.scalars(stmt).all()
for article in res:
print(article.title)
Результат выполнения кода:
article 2
article 3
Пример
Давайте найдем записи, опубликованные после указанной даты:
from datetime import date
from sqlalchemy import create_engine, Date, 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)
published: Mapped[date] = mapped_column(Date)
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with Session(engine) as session:
session.add_all([
Article(title='article 1', published=date(2024, 1, 1)),
Article(title='article 2', published=date(2024, 5, 17)),
Article(title='article 3', published=date(2024, 6, 1)),
])
session.commit()
stmt = select(Article).where(Article.published > date(2024, 3, 1))
res = session.scalars(stmt).all()
for article in res:
print(article.title)
Результат выполнения кода:
article 2
article 3