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

连接Datastax Astra DB后如何保持返回响应的数据类型不变

问题原因
  1. Datastax Astra v2 版本的REST API默认会对浮点类型(float、double)做序列化处理:为了规避不同编程语言解析浮点数时的精度损失问题,接口默认将所有浮点类型字段序列化为字符串返回,仅整数类型字段会保留原始数值格式,该行为和表结构定义、CSV上传环节的配置无关。
  2. 你当前调用的查询接口未开启保留原始数值类型的参数,触发了默认的序列化逻辑,因此出现float字段返回为字符串的情况。
解决方案

你可以根据业务场景选择以下任意一种方案解决:

  • 方案1:添加请求参数开启原始数值返回
    在请求路径后追加raw=true查询参数即可让接口直接返回原始float类型,修改后的代码示例:
    res = astra_client.request(
        method=http_methods.GET,
        path=f"/api/rest/v2/keyspaces/{ASTRA_DB_KEYSPACE}/{ASTRA_DB_COLLECTION}/rows?raw=true")
    
    注意该方案可能存在多语言浮点数解析的精度偏差风险,对数据精度要求极高的业务不推荐使用。
  • 方案2:响应返回后手动做类型转换
    预先定义好浮点类型字段的映射规则,拿到响应结果后遍历转换即可,该方案兼容性最好、无精度风险,代码示例:
    # 定义所有需要转换为float的字段
    float_field_list = ["PetalWidthCm", "PetalLengthCm", "SepalWidthCm", "SepalLengthCm"]
    # 遍历处理返回的每行数据
    converted_rows = []
    for item in res.json():
        temp_item = item.copy()
        for field in float_field_list:
            if field in temp_item and type(temp_item[field]) == str:
                temp_item[field] = float(temp_item[field])
        converted_rows.append(temp_item)
    
  • 方案3:替换为官方Python驱动查询
    若无需强制使用REST接口,可切换为Astra官方适配的Cassandra Python Driver做数据查询,驱动会自动匹配CQL定义的数据类型返回,无需额外做类型转换处理。

内容的提问来源于stack exchange,提问作者Pritam Sinha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 03:06:06