无法将查询与Redis对象映射器(ROM)一起使用

2024-06-16 13:36:47 发布

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

我正在使用Redis对象映射器(ROM)here。在

这是我的模型

class User(rom.Model): name = rom.String(required=True, unique=True) nickname = rom.String(required=False) photo = rom.String(required=False)

我在努力-

user1 = User(name="Ankush", nickname="iamkhush", photo='http://graph.facebook.com/iamkhush/picture') user1.save()

我知道了就知道结果了

user = User.get(1) #user is a model instance

但当我这么做的时候

user_obj = User.query.filter(name='Ankush').execute()

我得到[](一个空结果)

不明白为什么会这样?在


Tags: 对象nameredisfalsetruestringromnickname
2条回答

这有两个部分。首先,如果您想通过使用unique=True定义的列来获取项,则不需要使用索引,但是查询是不同的。{{cd3>可以使用cd3}形式得到:

>>> User.get_by(name="Ankush")
<__main__.User object at 0x87070cc>

主要的限制是您必须按照列中的定义准确传递整列。这对于保持电子邮件地址的唯一性非常有用(请先将其小写!),用户名(注意大写)和其他示例。在

第二部分是,当启用索引时,索引对字符串/文本列具有“不区分大小写的唯一单词包”语义(我来自世界各地的搜索引擎,它的语义与典型的数据库查询有着本质上不同(而且可以说更好)的语义)。因此,如果要查找条目,需要使用:

^{pr2}$

(还要注意,.execute().all()的别名)。在

如果要更改使用index=True定义的列的区分大小写或其他行为,则需要传递一个自定义keygen参数(可以在rom.Stringrom.Text键生成语义的rom.util._string_keygen()https://github.com/josiahcarlson/rom/blob/master/rom/util.py#L149处)。在

您需要将index=True和name一起传递,以允许过滤器查询它。在

class User(rom.Model):
name = rom.Text(required=True, unique=True,index = True,keygen=text_keyge)
nickname = rom.String(required=False)
photo = rom.String(required=False)

相关问题 更多 >