为什么 connection.timezone 是 None 对于 django 中的 postgres 数据库连接?
why connection.timezone is None for postgres db connection in django?
我正在使用 postgres 探索 django。我遇到了一件奇怪的事情。我的 postgres 连接的 TIMEZONE
设置(我不是在谈论 settings.py 中的 TIME_ZONE
)令人惊讶地设置为 None。我已将时区设置为 'Asia/Kolkata'
并且 USE_TZ
也是 True。根据 django 文档,当 USE_TZ
为 True 时,连接时区默认为 'UTC'
,而当 settings.py 时它将等于 TIME_ZONE
的值,当 USE_TZ
为假。但是,对于我来说,在这两种情况下,connection.timezone 的值都是空的。
我已经尝试使用 sqlite3 后端,我得到了预期的结果。我不知道,为什么我没有得到预期的 postgres 行为。
我正在使用 django==1.10.5 并且 postgres 在 64 位机器上是 9.5。我正在使用以下命令获取连接的时区。
from django.db import connection
print (connection.timezone)
提前致谢。
django.db.connection
是包装 database-specific 连接的通用抽象。
您可以使用 connection.connection
访问 the underlying database connection。
对于 PostgreSQL,这将是一个 psycopg2 连接。使用 psycopg2 获取连接时区的 documented 方法是 get_parameter_status("TimeZone")
.
将所有内容放在一起,这应该可行:
connection.connection.get_parameter_status("TimeZone")
但是等等!数据库连接是延迟创建的,所以只有当你已经执行了某种数据库操作时它才会起作用。为确保您有连接,您可以调用 connection.ensure_connection()
,或者,如果您想要一个表达式:
>>> from django.db import connection
>>> connection.cursor().connection.get_parameter_status("TimeZone")
'UTC'
有关参考,请参阅 PostgreSQL 数据库包装器的 ensure_timezone()
方法。
我正在使用 postgres 探索 django。我遇到了一件奇怪的事情。我的 postgres 连接的 TIMEZONE
设置(我不是在谈论 settings.py 中的 TIME_ZONE
)令人惊讶地设置为 None。我已将时区设置为 'Asia/Kolkata'
并且 USE_TZ
也是 True。根据 django 文档,当 USE_TZ
为 True 时,连接时区默认为 'UTC'
,而当 settings.py 时它将等于 TIME_ZONE
的值,当 USE_TZ
为假。但是,对于我来说,在这两种情况下,connection.timezone 的值都是空的。
我已经尝试使用 sqlite3 后端,我得到了预期的结果。我不知道,为什么我没有得到预期的 postgres 行为。
我正在使用 django==1.10.5 并且 postgres 在 64 位机器上是 9.5。我正在使用以下命令获取连接的时区。
from django.db import connection
print (connection.timezone)
提前致谢。
django.db.connection
是包装 database-specific 连接的通用抽象。
您可以使用 connection.connection
访问 the underlying database connection。
对于 PostgreSQL,这将是一个 psycopg2 连接。使用 psycopg2 获取连接时区的 documented 方法是 get_parameter_status("TimeZone")
.
将所有内容放在一起,这应该可行:
connection.connection.get_parameter_status("TimeZone")
但是等等!数据库连接是延迟创建的,所以只有当你已经执行了某种数据库操作时它才会起作用。为确保您有连接,您可以调用 connection.ensure_connection()
,或者,如果您想要一个表达式:
>>> from django.db import connection
>>> connection.cursor().connection.get_parameter_status("TimeZone")
'UTC'
有关参考,请参阅 PostgreSQL 数据库包装器的 ensure_timezone()
方法。