Python Sqlalchemy,postgres datetime无时区
我正在尝试向python/sqlalchemy脚本添加时区支持。我研究过时区并使用pytz。我知道我应该尽可能多地使用UTC,并且只显示当地时间。由于应用程序的性质,这非常容易 一切都正常,除了当我插入UTC数据时,它会在进入数据库之前以某种方式转换为本地时间(BST),我完全不知道为什么会发生这种情况以及如何避免它 我的表格(postgres)定义如下(仅相关部分): 我已经调试了sqlalchemy的插入操作。情况就是这样:Python Sqlalchemy,postgres datetime无时区,python,postgresql,datetime,sqlalchemy,timezone,Python,Postgresql,Datetime,Sqlalchemy,Timezone,我正在尝试向python/sqlalchemy脚本添加时区支持。我研究过时区并使用pytz。我知道我应该尽可能多地使用UTC,并且只显示当地时间。由于应用程序的性质,这非常容易 一切都正常,除了当我插入UTC数据时,它会在进入数据库之前以某种方式转换为本地时间(BST),我完全不知道为什么会发生这种情况以及如何避免它 我的表格(postgres)定义如下(仅相关部分): 我已经调试了sqlalchemy的插入操作。情况就是这样: 2016-07-28 17:16:27,896 INFO sqla
2016-07-28 17:16:27,896 INFO sqlalchemy.engine.base.Engine INSERT INTO
foo (x, y, "when_utc") VALUES (%(x)s, %(y)s, %(when_utc)s) RETURNING fb_foo.id
2016-07-28 17:16:27,896 INFO sqlalchemy.engine.base.Engine {
'when_utc': datetime.datetime(2016, 7, 11, 23, 0, tzinfo=<UTC>), 'y': 0, 'x': 0}
发生了什么事?我坚信没有什么能改变这两者之间的领域。它似乎只是将DST小时添加到我的数据库条目中。为什么?我怎样才能避免这种情况
R问题是您的列类型是
不带时区的时间戳
,而它应该是带时区的时间戳
。这可以通过SqlAlchemy在声明列时使用DateTime(timezone=True)
实现。不幸的是,默认值为False。。。有关更多信息,请参阅文档问题在于,您的列类型是不带时区的时间戳,而应该是带时区的时间戳。这可以通过SqlAlchemy在声明列时使用DateTime(timezone=True)
实现。不幸的是,默认值为False。。。有关更多信息,请参阅文档我在postgresql.conf中找到了将时区从GB更改为UTC并重新创建数据库的解决方法。它现在可以工作,但这不是避免强制转换的唯一方法。您可以在SQLAlchemy中更改PostgreSQL连接的时区,而无需更改PostgreSQL.conf。请参阅。我在postgresql.conf中找到了将时区从GB更改为UTC并重新创建数据库的解决方法。它现在可以工作,但这不是避免强制转换的唯一方法。您可以在SQLAlchemy中更改PostgreSQL连接的时区,而无需更改PostgreSQL.conf。看见
2016-07-28 17:16:27,896 INFO sqlalchemy.engine.base.Engine INSERT INTO
foo (x, y, "when_utc") VALUES (%(x)s, %(y)s, %(when_utc)s) RETURNING fb_foo.id
2016-07-28 17:16:27,896 INFO sqlalchemy.engine.base.Engine {
'when_utc': datetime.datetime(2016, 7, 11, 23, 0, tzinfo=<UTC>), 'y': 0, 'x': 0}
fpp=> select x,y,when_utc from foo;
x | y | when_utc
---+---+---------------------
0 | 0 | 2016-07-12 00:00:00
(1 row)