Django postgres 连接,为 psycopg2 设置时区

Django postgres connection, SET timezone for 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.

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

首先发出 SET timezone TO 'Asia/Tbilisi'; 查询,或在打开连接之前设置 PGTZ environment variable(如果需要从 python 执行,请使用 os.environ)。您还可以发出 ALTER DATABASEALTER ROLE 并默认设置时区,如 PGTZ 的链接文档中所述,但我倾向于避免这样做,因为很容易忘记这样做对于新 DBs/users(& 它也仅适用于新连接;long-running 连接时将具有默认的 TZ)。