当我在sqlalchemy DBAPI和datagrip上运行同一个sql select语句时,它会给出不同的结果
CONN_STR = "postgresql://{}:{}@{}:5432/{}"\
.format('DATABASE_USER','DATABASE_PASSWORD','DATABASE_HOST', 'DATABASE_NAME')
engine = create_engine(CONN_STR, connect_args={'sslmode': 'require'})
def run_sql_query(query):
df = pd.read_sql_query(query, con=engine)
return df
example_statement = """
select count(*)
from users
where "date" >= '2020-05-01'
"""
result = run_sql_query(example_statement)
如果我直接在datagrip上运行该脚本,那么该脚本将返回不同的计数,我在同一个表上尝试了不同的语句,并且在同一个表上总是缺少3000条记录
问题出在“date”列中,它的数据类型是
TIMESTAMP WITH TIME ZONE
,并且设置为CET时区。在Datagrip或任何其他应用程序上运行查询时,应用程序的时区默认设置为本地时间(本例中为CET)。但是当通过SQLAlchemy运行相同的查询时,默认情况下时区设置为UTC,这就是结果不同的原因我通过将时区传递到连接参数中进行了修复:
相关问题 更多 >
编程相关推荐