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 DATABASE
或 ALTER ROLE
并默认设置时区,如 PGTZ
的链接文档中所述,但我倾向于避免这样做,因为很容易忘记这样做对于新 DBs/users(& 它也仅适用于新连接;long-running 连接时将具有默认的 TZ)。
在 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 DATABASE
或 ALTER ROLE
并默认设置时区,如 PGTZ
的链接文档中所述,但我倾向于避免这样做,因为很容易忘记这样做对于新 DBs/users(& 它也仅适用于新连接;long-running 连接时将具有默认的 TZ)。