Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Sqlalchemy,postgres datetime无时区_Python_Postgresql_Datetime_Sqlalchemy_Timezone - Fatal编程技术网

Python Sqlalchemy,postgres datetime无时区

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

我正在尝试向python/sqlalchemy脚本添加时区支持。我研究过时区并使用pytz。我知道我应该尽可能多地使用UTC,并且只显示当地时间。由于应用程序的性质,这非常容易

一切都正常,除了当我插入UTC数据时,它会在进入数据库之前以某种方式转换为本地时间(BST),我完全不知道为什么会发生这种情况以及如何避免它

我的表格(postgres)定义如下(仅相关部分):

我已经调试了sqlalchemy的插入操作。情况就是这样:

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)