You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

本地返回float但GitHub Actions返回Decimal的原因及float适配需求

解决EXTRACT查询在本地与GitHub Actions返回类型不一致的问题

问题概述

本地环境执行EXTRACT查询返回float类型值(如1.0、13.0),但在GitHub Actions中返回Decimal类型值(如Decimal('1')、Decimal('13')),需要统一为float类型。

相关代码与查询

业务代码

session = app.ReadOnlySession()
query_ = text(query)
result_proxy = session.execute(query_, fetched_options)
res = result_proxy.fetchone()[0]
session.close()
if input_key in ["local_hour", "day_of_week"]:
    logger.info(f"ITS FOR TEST: {res=}")

查询语句

SELECT EXTRACT(dow FROM now())
SELECT EXTRACT(hour FROM now())

解决方案

方案1:显式转换结果为float

直接在代码中将查询结果转为float,彻底规避环境差异带来的类型不一致问题,这是最简洁可靠的方式:

res = float(result_proxy.fetchone()[0])

无论底层返回Decimal还是float,都会被统一转换为float类型。

方案2:调整数据库驱动的类型转换配置

如果希望从驱动层面解决,以PostgreSQL的psycopg2驱动为例,可在创建SQLAlchemy引擎时添加use_decimal=False参数,强制驱动将DECIMAL类型转为float返回:

from sqlalchemy import create_engine

engine = create_engine(
    "postgresql://your_user:your_pass@your_host/your_db",
    connect_args={"use_decimal": False}
)

该参数会让psycopg2直接返回float而非Decimal,从根源上统一类型。

方案3:统一依赖版本

检查本地与GitHub Actions环境中的依赖版本(如psycopg2/psycopg2-binary、SQLAlchemy),确保两者完全一致。将本地验证过的依赖版本写入requirements.txt或pyproject.toml,让GitHub Actions安装相同版本的依赖,避免版本差异导致的类型转换逻辑变化。

内容的提问来源于stack exchange,提问作者Dmytryi Bernada

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 22:00:53