Функция func.now
Функция func.now создает SQL-выражение
для получения текущих даты и времени сервера
базы данных. Она не принимает обязательных
параметров и транслируется в соответствующую
функцию диалекта СУБД, например CURRENT_TIMESTAMP
или now. Функция часто используется
для заполнения колонок со временем создания
или обновления записи, а также в условиях
WHERE и выражениях SELECT.
Синтаксис
func.now()
Пример
Давайте получим текущее время сервера в простом запросе:
from sqlalchemy import create_engine, select, func
engine = create_engine('sqlite:///:memory:')
with engine.connect() as conn:
res = conn.execute(select(func.now())).scalar()
print(res)
Результат выполнения кода:
"2024-01-01 12:00:00"
Пример
Давайте подставим текущее время в условие
WHERE при выборке статей:
from sqlalchemy import create_engine, select, 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]
text: Mapped[str]
status: Mapped[str]
num: Mapped[int]
from sqlalchemy import create_engine, select, func
from sqlalchemy.orm import Session
from models import Article
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with Session(engine) as session:
session.add(Article(title='article', text='text', status='active', num=1))
session.commit()
query = select(Article.title).where(func.now() > Article.title)
res = session.execute(query).scalars().all()
print(res)
Результат выполнения кода:
[]
Пример
Давайте выведем текущее время вместе с заголовками статей в одном запросе:
from sqlalchemy import create_engine, select, func
from sqlalchemy.orm import Session
from models import Article
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with Session(engine) as session:
session.add(Article(title='article', text='text', status='active', num=1))
session.commit()
query = select(Article.title, func.now())
res = session.execute(query).all()
print(res)
Результат выполнения кода:
[('article', '2024-01-01 12:00:00')]
Пример
Давайте посмотрим, в какой SQL-запрос
транслируется функция func.now:
from sqlalchemy import create_engine, select, func
from sqlalchemy.dialects import sqlite
engine = create_engine('sqlite:///:memory:')
query = select(func.now())
print(query.compile(dialect=sqlite.dialect()))
Итоговый SQL запрос:
SELECT CURRENT_TIMESTAMP AS now
Смотрите также
-
функцию
func,
которая создает произвольные SQL-функции -
функцию
current_timestamp,
которая возвращает текущую метку времени -
функцию
current_date,
которая возвращает текущую дату -
функцию
current_time,
которая возвращает текущее время