我怀疑正在发生的事情是您
datetime正确存储了感知s,但是由于该列为,所以没有时区回读它
WITHOUT TIMEZONE。每个PostgreSQL连接都有一个关联的时区,该时区默认为系统时区,因此,当您检索特定的时区时,
TIMESTAMP它会
datetime在系统时区中作为天真返回。由于这个原因,我总是建议
TIMESTAMPWITH TIME ZONE改为存储。
如果要将SQLAlchemy中的连接时区更改为UTC,请在创建引擎时执行以下操作:
engine = create_engine("...", connect_args={"options": "-c timezone=utc"})这应该使您
datetime以UTC天真地读回该值。
编辑:@Peter该文档并不明显如何执行此操作;我必须阅读一些不同的文档并连接点:
- 有关的SQLAlchemy文档
connect_args
允许您将参数直接传递给DBAPIconnect()
- 上的psycopg2文档
connect
,它告诉您可以传递给libpq的其他参数 options
参数上的libpq文档,该文件可让您在与libpq连接时传递命令行选项- 有关
-c
命令行开关的PostgreSQL文档,该命令行开关允许您修改配置设置 - 最后,关于
timezone
您可以设置的客户端设置的PostgreSQL客户端文档



