Приведение SQLAlchemy к PostgreSQL TIMESTAMP WITH TIME ZONE

Я видел, что в postgresql мы можем привести дату и время к timestamp или timestamptz, что равно TIMESTAMP WITHOUT TIME ZONE или TIMESTAMP WITH TIME ZONE.

Например, используя psql(Postgres shell):

db=# select '2023-03-31 00:00:00'::timestamp;

      timestamp      
---------------------
 2023-03-31 00:00:00

или

db=# select '2023-03-31 00:00:00'::timestamptz;

      timestamptz       
------------------------
 2023-03-31 00:00:00+00

Второй пример — это именно то, что я пытаюсь сделать с помощью SqlAlchemy.

Я знаю, что мы можем использовать Model.created_date.cast(TIMESTAMP), как и в первом примере, но мне нужно преобразовать created_date в timestamptz.

Цель этого состоит в том, чтобы извлечь некоторые части этой даты во многих разных часовых поясах.

кроме того, поле в моей модели такое:

created_date = Column(DateTime, nullable=False, default=datetime.utcnow)

Согласно документам Отметка времени: используйте аргумент TIMESTAMP.timezone, чтобы включить «TIMESTAMP WITH TIMEZONE» для этих бэкэндов.

Adrian Klaver 04.04.2023 17:31
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
1
160
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете передать timezone=True типу TIMESTAMP для PostgreSQL:

from sqlalchemy import create_engine, cast, select, text
from sqlalchemy.dialects.postgresql import TIMESTAMP

engine = create_engine("postgresql://…")

qry = select(cast(text("'2023-03-31 00:00:00'"), TIMESTAMP(timezone=True)))
print(qry.compile(engine))
# SELECT CAST('2023-03-31 00:00:00' AS TIMESTAMP WITH TIME ZONE) AS anon_1

Другие вопросы по теме