(sqlalchemy) Использование в bulk_update_mapping текущего времени БД
Вопрос по sqlalchemy / postgresql
Делаю обновление записей через bulk_update_mappings.
В обновляемой таблице есть поле update_time с типом timestamp, в которое нужно вставлять текущее время.
Проблема в том, что есть два требования:
- Для колонки нельзя установить default-значение.
- Использовать надо именно время БД, то есть взять в клиентском коде datetime.now() и явно передать его - не вариант.
Если бы речь шла про сырой SQL, я бы просто использовал постгресовую функцию current_timestamp.
А вот как такое передать через алхимию в методе bulk_update_mappings ?
Ответы (1 шт):
Автор решения: Pak Uula
→ Ссылка
Тайм-зона сервера известна?
Например, Europe/Moscow
Тогда строка времени вычисляется в три приёма: текущее время клиента в UTC -> текущее время в ТЗ сервера -> строчка для записи в БД.
from datetime import datetime
import pytz
SRV_TZ = pytz.timezone("Europe/Moscow")
utc_time = datetime.utcnow().replace(tzinfo=pytz.utc) # datetime object with UTC TZ set
srv_time = utc_time.astimezone(SRV_TZ) # datetime object with MSK TZ
srv_time_str = srv_time.isoformat()
Я бы пошел таким путём.