def mysql_unknown_field_to_utcdatetime(x): """The field might be a DATETIME, or an ISO-formatted field.""" return func.IF( func.LENGTH(x) == 19, # ... length of a plain DATETIME e.g. 2013-05-30 00:00:00 x, mysql_isotzdatetime_to_utcdatetime(x))
def mysql_isotzdatetime_to_utcdatetime(x): """Creates an SQL expression wrapping a field containing our ISO-8601 text, making a DATETIME out of it, in the UTC timezone.""" # For format, see # https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-format # noqa # Note the use of "%i" for minutes. # Things after "func." get passed to the database engine as literal SQL # functions; http://docs.sqlalchemy.org/en/latest/core/tutorial.html return func.CONVERT_TZ( func.STR_TO_DATE(func.LEFT(x, func.LENGTH(x) - 6), '%Y-%m-%dT%H:%i:%S.%f'), func.RIGHT(x, 6), "+00:00")