Open
Description
Inserting a timezone aware datetime
object using SQLAlchemy fails, even though, the object could be serialized into an ISO-format string that contains a timezone offset.
https://github.com/crate/crate-python/blob/master/src/crate/client/sqlalchemy/dialect.py#L123-L125
from datetime import datetime, timezone, timedelta
dt = datetime(2020, 6, 23, 10, 0, 0, tzinfo=timezone.utc)
dt.strftime("%Y-%m-%dT%H:%M:%S.%f%z")
'2020-06-23T10:00:00.000000+0000'
# or
dt = datetime(2020, 6, 23, 12, 0, 0, tzinfo=timezone(timedelta(hours=2), name="CEST"))
dt.strftime("%Y-%m-%dT%H:%M:%S.%f%z")
'2020-06-23T12:00:00.000000+0200'
$ cr8 run-crate 4.1.5 -e CRATE_HEAP_SIZE=2G --disable-java-magic -- @crash --hosts '{node.http_url}' -c "SELECT ('2020-06-23T10:00:00.000000+0000'::TIMESTAMP WITH TIME ZONE = '2020-06-23T12:00:00.000000+0200'::TIMESTAMP WITH TIME ZONE) AS equal"
# run-crate
===========
Skipping download, tarball alrady extracted at /home/christian/.cache/cr8/crates/crate-4.1.5
Starting Crate process
CrateDB launching:
PID: 1812751
Logs: /home/christian/.cache/cr8/crates/crate-4.1.5/logs/cr8-crate-run57244782.log
Data: /tmp/tmpbpru7ibr (removed on stop)
Psql : 127.0.0.1:5432
Http : 127.0.0.1:4200
Transport : 127.0.0.1:4300
Cluster ready to process requests
# @crash
========
CONNECT OK
+-------+
| equal |
+-------+
| TRUE |
+-------+
SELECT 1 row in set (0.017 sec)
Same applies for de-serializing.
It may even be nice to add support for TIMESTAMP WITH(OUT) TIME ZONE AT TIME ZONE
fields.
This issue came up when I tried to insert a datetime object from the boto
client response that is timezone aware, raising TimezoneUnawareException: Timezone aware datetime objects are not supported