Существует параметр timezone
для DateTime
времени столбца, поэтому нет проблем с хранением datetime
объектов с учетом часового пояса. Однако я нашел удобным преобразовать хранимые datetime
в UTC автоматически с помощью декоратора простого типа:
from sqlalchemy import types
from dateutil.tz import tzutc
from datetime import datetime
class UTCDateTime(types.TypeDecorator):
impl = types.DateTime
def process_bind_param(self, value, engine):
if value is not None:
return value.astimezone(tzutc())
def process_result_value(self, value, engine):
if value is not None:
return datetime(value.year, value.month, value.day,
value.hour, value.minute, value.second,
value.microsecond, tzinfo=tzutc())
Обратите внимание, что это ведет себя хорошо, когда вы используете naive datetime
случайно (то есть это вызовет ValueError).