首页 > 解决方案 > Django postgres 连接,为 psycopg2 设置时区

问题描述

在 django settings.py 我有TIME_ZONE = 'Asia/Tbilisi'

我也有相同的 postgres 时区

并且分别,两者都可以正常工作。

虽然,在 Django 中,当我运行以下原始查询时:

from django.db import connection
...
cursor = connection.cursor()
cursor.execute("select localtimestamp(0)")
res = cursor.fetchall()

这显示了带有 UTC 时区的日期时间。

可能这是由psycopg2连接设置引起的?因为这:

print( connection.cursor().connection.get_parameter_status("TimeZone") )

显示:UTC

问题:如何更改此连接设置并设置所需的时区?

标签: djangopostgresqldjango-3.1

解决方案


先发出一个SET timezone TO 'Asia/Tbilisi';查询,或者在打开连接之前设置PGTZ 环境变量os.environ如果需要从 python 中进行)。您也可以发出ALTER DATABASEorALTER ROLE并默认设置时区,如链接文档中所述PGTZ,但我倾向于避免这样做,因为很容易忘记为新数据库/用户执行此操作(并且它也仅适用于新连接;长时间运行的将具有连接时默认的 TZ)。


推荐阅读