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

Redis OM Python中find()与get()查询结果不一致问题排查

问题:Redis OM Python中find()与get()查询结果不一致及相关疑问

以下两段代码返回结果不一致:

ts = Signal.find(Signal.pk == pk).all()
ts = Signal.get(pk)
  • 第一段代码返回空数组(仅重启FastAPI后,插入的数据才会被返回)
  • 第二段代码可正常返回完整的JsonModel对象

信号已通过signal.save()方法成功保存为JSON格式。请问使用find()按主键查询记录时,有哪些注意事项?


相关代码与配置

模型定义

from enum import Enum
from typing import Optional
from uuid import UUID
from famodels.models.direction import Direction
from famodels.models.side import Side
from redis_om import Migrator
from redis_om import (Field, JsonModel)

class Signal(JsonModel):
    provider_id: str = Field(index=True)
    algo_id: str = Field(index=True)
    provider_signal_id: Optional[str]
    provider_trade_id: str = Field(index=True)
    is_hot_signal: bool = Field(default=False )
    market: str = Field(index=True)
    exchange: str = Field(index=True)
    direction: Direction = Field(index=True)
    side: Side = Field(index=True)
    price: float
    tp: float
    sl: float     

    class Meta:
        global_key_prefix="signal-processing"
        model_key_prefix="raw-signal"
    # class Config:
    #     orm_mode = True

Migrator().run()

FastAPI中额外调用Migrator的代码

@app.get("/signals")
async def get_signal():
    logger.debug("get all Signals.")
    Migrator().run()
    return Signal.find().all()

额外发现的问题

  • 给模型新增属性后,新创建的记录在RedisInsight中可见,但调用Signal.find().all()无法查询到
  • 布尔字段必须显式设置为False,否则查询返回空数组,似乎无法直接搜索布尔值,需转换为1/0,这一情况很不理想。相关字段定义:
is_hot_signal: bool = Field(default=False, index=False)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 22:20:17