为什么connection.timezone对于django中的postgres数据库连接是无?

时间:2018-03-14 11:44:56

标签: python django postgresql database-connection

我正在用postgres探索django。我遇到了一件奇怪的事。我的postgres连接的TIMEZONE设置(我不是在settings.py中讨论TIME_ZONE)令人惊讶地设置为无。我已将时区设为'Asia/Kolkata'USE_TZ也为True。根据django文档,当USE_TZ为True时,默认情况下为连接时区'UTC',而当它TIME_ZONE在settings.py中时,USE_TZfrom django.db import connection print (connection.timezone) 1}}是假的。但是,在这两种情况下,对于我来说,connection.timezone的值都是空的。

我尝试过使用sqlite3后端,我得到了预期的结果。我不知道为什么我没有得到postgres的预期行为。

我正在使用django == 1.10.5而postgres在64位机器上是9.5。我正在使用以下命令来获取连接的时区。

zipItem

提前致谢。

1 个答案:

答案 0 :(得分:1)

django.db.connection是一个包含特定于数据库的连接的通用抽象。

您可以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()方法。