pd.read_sql无法读取PostgreSQL中无夏令时偏移的timestamptz值
使用pd.read_sql读取PostgreSQL timestamptz列时无DST偏移日期变为NaT的问题
使用pd.read_sql从PostgreSQL数据库查询数据,涉及的列均为timestamptz类型。其中带夏令时(DST)偏移的日期能被正确读取,但不带偏移的日期会被解析为NaT。
示例A - smart_departure无DST偏移
使用DBeaver查询结果
| wtt_arrival | wtt_pass | wtt_departure | smart_arrival | smart_pass | smart_departure |
|---|---|---|---|---|---|
| NULL | NULL | 1970-01-01 08:23:00.000 +0100 | NULL | NULL | 2022-01-14 08:23:03.000 +0000 |
使用pd.read_sql查询结果(示例代码:pd.read_sql('select * from database', con=engine))
| wtt_arrival | wtt_pass | wtt_departure | smart_arrival | smart_pass | smart_departure |
|---|---|---|---|---|---|
| None | None | 1970-01-01 07:23:00+00:00 | None | None | NaT |
直接获取值查询结果(Gord Thompson建议的方式)
(None, None, datetime.datetime(1970, 1, 1, 7, 23, tzinfo=datetime.timezone.utc), None, None, None)
使用psql查询结果(Adrian Klaver建议的方式)
| wtt_arrival | wtt_pass | wtt_departure | smart_arrival | smart_pass | smart_departure |
|---|---|---|---|---|---|
| 1970-01-01 07:23:00+00 |
示例B - smart_arrival有DST偏移
使用DBeaver查询结果
| wtt_arrival | wtt_pass | wtt_departure | smart_arrival | smart_pass | smart_departure |
|---|---|---|---|---|---|
| 1970-01-01 15:49:00.000 +0100 | NULL | NULL | 2022-10-14 15:47:27.000 +0100 | NULL | NULL |
使用pd.read_sql查询结果
| wtt_arrival | wtt_pass | wtt_departure | smart_arrival | smart_pass | smart_departure |
|---|---|---|---|---|---|
| 1970-01-01 14:49:00+00:00 | None | None | 2022-10-14 14:47:27+00:00 | None | None |
直接获取值查询结果(Gord Thompson建议的方式)
(datetime.datetime(1970, 1, 1, 14, 49, tzinfo=datetime.timezone.utc), None, None, datetime.datetime(2022, 10, 14, 14, 47, 27, tzinfo=datetime.timezone.utc), None, None)
使用psql查询结果(Adrian Klaver建议的方式)
| wtt_arrival | wtt_pass | wtt_departure | smart_arrival | smart_pass | smart_departure |
|---|---|---|---|---|---|
| 1970-01-01 14:49:00+00 | 2022-10-14 14:47:27+00 |
执行show search_path和\d *.scheduled_and_actual_timings的结果
timetabletooldev=> \d *.scheduled_and_actual_timings View "public.scheduled_and_actual_timings" Column | Type | Collation | Nullable | Default ----------------------+--------------------------+-----------+----------+--------- wtt_arrival | timestamp with time zone | | | wtt_pass | timestamp with time zone | | | wtt_departure | timestamp with time zone | | | smart_arrival | timestamp with time zone | | | smart_pass | timestamp with time zone | | | smart_departure | timestamp with time zone | | | timetabletooldev=> show search_path; search_path ----------------- "$user", public (1 row)
内容的提问来源于stack exchange,提问作者Ivan
相关产品推荐
相关产品推荐

