我正在用postgres探索django。我遇到了一件奇怪的事。我的postgres连接的TIMEZONE
设置(我不是在settings.py中讨论TIME_ZONE
)令人惊讶地设置为无。我已将时区设为'Asia/Kolkata'
,USE_TZ
也为True。根据django文档,当USE_TZ
为True时,默认情况下为连接时区'UTC'
,而当它TIME_ZONE
在settings.py中时,USE_TZ
为from django.db import connection
print (connection.timezone)
1}}是假的。但是,在这两种情况下,对于我来说,connection.timezone的值都是空的。
我尝试过使用sqlite3后端,我得到了预期的结果。我不知道为什么我没有得到postgres的预期行为。
我正在使用django == 1.10.5而postgres在64位机器上是9.5。我正在使用以下命令来获取连接的时区。
zipItem
提前致谢。
答案 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()
方法。