sir*_*cco 10 python datetime sqlalchemy
我有以下情况: - Postgres后端有一个字段
timestamp without time zone
Run Code Online (Sandbox Code Playgroud)
所以在数据库中,存储的日期不再是6AM ..但是9AM - 它在我当地时区转换.
我不明白发生了什么.为什么保存的日期转换为本地?
谢谢.
编辑
所以在@ univerio的回复之后我尝试了一些东西:我从日期时间中删除了tzinfo
.replace(tzinfo = None)
Run Code Online (Sandbox Code Playgroud)
现在日期保存正确 - 它不会调整到当地时间.我不太明白为什么所以我会暂时保留这个问题以防万一有人解释.
谢谢.
uni*_*rio 25
我怀疑正在发生的是你datetime正确地存储了知识,但是没有用时区读回来因为列是WITHOUT TIME ZONE.每个PostgreSQL连接都有一个默认为系统时区的关联时区,因此当您检索特定时区时,TIMESTAMP它会datetime在系统的时区中以天真的形式返回.出于这个原因,我总是建议存储TIMESTAMP WITH TIME ZONE.
如果要将SQLAlchemy中的连接时区更改为UTC,请在创建引擎时执行以下操作:
engine = create_engine("...", connect_args={"options": "-c timezone=utc"})
Run Code Online (Sandbox Code Playgroud)
这应该让你datetime在UTC中以天真的形式读回值.
编辑:@Peter文档没有说明如何做到这一点; 我不得不阅读几个不同的文档并连接点:
connect_args它的SQLAlchemy文档允许您将参数直接传递给DBAPIconnect()connect,它告诉您可以传递给libpq的额外参数options参数的libpq文档,它允许您在与libpq连接时传递命令行选项-c命令行开关的PostgreSQL文档,允许您修改配置设置timezone您可以设置的客户端设置| 归档时间: |
|
| 查看次数: |
4298 次 |
| 最近记录: |