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
相关产品推荐
相关产品推荐

