From 9d5004cc4654c55fbfc94b38c0fc479115a3ea6e Mon Sep 17 00:00:00 2001 From: fenglei <214998036@qq.com> Date: Thu, 12 Dec 2019 12:11:19 +0800 Subject: [PATCH 1/2] add local timezone support effect datefield datetimefield --- connector.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/connector.py b/connector.py index 2a87fae..20be570 100644 --- a/connector.py +++ b/connector.py @@ -12,6 +12,11 @@ from infi.clickhouse_orm.models import ModelBase from infi.clickhouse_orm.database import Database +# fix local timezone +from pytz.reference import LocalTimezone +import os +# fixed local timezone + # PEP 249 module globals apilevel = '2.0' threadsafety = 2 # Threads may share the module and connections. @@ -355,7 +360,17 @@ def _process_response(self, response): for r in response: if not cols: cols = [(f, r._fields[f].db_type) for f in r._fields] - data.append([getattr(r, f) for f in r._fields]) + vals = [] + for fi in r._fields: + val = getattr(r, fi) + + clickhouseUseLocalTimezone = int(os.getenv('CLICKHOUSE_USE_LOCAL_TIMEZONE', '0')) + if clickhouseUseLocalTimezone and (r._fields[fi].db_type == 'DateTime' or r._fields[fi].db_type == 'Date'): + val = val.astimezone(LocalTimezone()) + + vals.append(val) + data.append(vals) + # data.append([getattr(r, f) for f in r._fields]) self._data = data self._columns = cols self._state = self._STATE_FINISHED From f2b4ae9be9b63051339b029c48c1f38e070cdb41 Mon Sep 17 00:00:00 2001 From: fenglei <214998036@qq.com> Date: Thu, 12 Dec 2019 13:17:59 +0800 Subject: [PATCH 2/2] change fetch local timezone logic to tzlocal --- connector.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/connector.py b/connector.py index 20be570..e6ee619 100644 --- a/connector.py +++ b/connector.py @@ -13,7 +13,7 @@ from infi.clickhouse_orm.database import Database # fix local timezone -from pytz.reference import LocalTimezone +from tzlocal import get_localzone import os # fixed local timezone @@ -366,7 +366,7 @@ def _process_response(self, response): clickhouseUseLocalTimezone = int(os.getenv('CLICKHOUSE_USE_LOCAL_TIMEZONE', '0')) if clickhouseUseLocalTimezone and (r._fields[fi].db_type == 'DateTime' or r._fields[fi].db_type == 'Date'): - val = val.astimezone(LocalTimezone()) + val = val.astimezone(get_localzone()) vals.append(val) data.append(vals)