gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 12:53:12 25 4
gpt4 key购买 nike

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

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

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

from django.db import connection
print (connection.timezone)

提前致谢。

最佳答案

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

您可以访问the underlying database connection使用 connection.connection

在 PostgreSQL 的情况下,这将是一个 psycopg2 连接。 documented使用 psycopg2 获取连接时区的方法是 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'

有关引用,请参阅 ensure_timezone() PostgreSQL 数据库包装器的方法。

关于python - 为什么 connection.timezone 对于 django 中的 postgres 数据库连接是 None?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49276965/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com