在sqlalchemy DBAPI上运行时,相同的sql语句会给出不同的结果

2024-05-19 23:03:17 发布

您现在位置:Python中文网/ 问答频道 /正文

当我在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条记录


Tags: run脚本dfsqlsqlalchemyexample语句conn
1条回答
网友
1楼 · 发布于 2024-05-19 23:03:17

问题出在“date”列中,它的数据类型是TIMESTAMP WITH TIME ZONE,并且设置为CET时区。在Datagrip或任何其他应用程序上运行查询时,应用程序的时区默认设置为本地时间(本例中为CET)。但是当通过SQLAlchemy运行相同的查询时,默认情况下时区设置为UTC,这就是结果不同的原因

我通过将时区传递到连接参数中进行了修复:

engine = create_engine(CONN_STR, connect_args={'sslmode': 'require', 'options': '-c timezone=cet'})

相关问题 更多 >