我有以下情况:-带有字段的Postgres后端
timestamp without time zone
因此,在数据库中存储的日期不再是6AM ..而是9AM-它在我的本地时区转换。
我不明白发生了什么。为什么保存的日期转换为本地日期?
谢谢。
编辑
因此,在@univerio的回复之后,我尝试了以下操作:我通过执行以下操作从日期时间中删除了tzinfo:
.replace(tzinfo = None)
现在,日期已正确保存-不会将其调整为当地时间。我不太明白为什么会这样,所以在有人解释的情况下,我暂时不提问题。
谢谢。
我怀疑正在发生的事情是您datetime
正确存储了感知s,但是由于该列为,所以没有时区回读它WITHOUT TIME ZONE
。每个PostgreSQL连接都有一个关联的时区,该时区默认为系统时区,因此,当您检索特定的时区时,TIMESTAMP
它会datetime
在系统时区中作为天真返回。出于这个原因,我总是建议存储TIMESTAMP WITH TIME ZONE
。
如果要将SQLAlchemy中的连接时区更改为UTC,请在创建引擎时执行以下操作:
engine = create_engine("...", connect_args={"options": "-c timezone=utc"})
这应该使您datetime
以UTC天真地读回该值。
编辑:@Peter该文档并不明显如何执行此操作;我必须阅读一些不同的文档并连接点:
connect_args
允许您将参数直接传递给DBAPIconnect()
connect
,它告诉您可以传递给libpq的其他参数options
参数上的libpq文档,该文件可让您在与libpq连接时传递命令行选项-c
命令行开关的PostgreSQL文档,该命令行开关允许您修改配置设置timezone
您可以设置的客户端设置的PostgreSQL客户端文档本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句