Возвращать поля с учетом часового пояса postgres в виде строки - PullRequest
0 голосов
/ 08 мая 2020

Я хотел бы использовать параметры create_engine, чтобы получить данные с учетом моего часового пояса (в python), но не как datetime.datetime, а как строковое представление времени UT C, которое оно хранит.

В частности, у меня есть:

engine = create_engine(DB_URI,
                       convert_unicode=True,
                       json_serializer=json.dumps)

conn = engine.connect()
res = find_all(conn, myquery)

Но мои даты возвращаются так:

datetime.datetime(2020, 4, 14, 7, 30, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=0, name=None)

Хотя я ожидаю, что это будет больше похоже:

2020-04-14 07:30Z

Что я могу изменить, чтобы sqlalchemy извлекала эти значения как текстовые временные метки?

Я ожидал, что следующее сработает:

PGTZ = psycopg2.extensions.new_type(
    psycopg2.extensions.DATEARRAY.values,
    'PGTZ',
    lambda value, curs: value.isoformat() if value is not None else None)

psycopg2.extensions.register_type(PGTZ)

Но это не повлияло.

Я обращался к другим ссылкам:

1 Ответ

1 голос
/ 08 мая 2020

Попробуйте функции cast() или type_coerce()?

Функция cast() будет использовать явное преобразование типа в базе данных, а type_coerce() будет рассматривать его как этот тип только при извлечении в Python.

...