首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用(ROM)查询

无法使用(ROM)查询
EN

Stack Overflow用户
提问于 2014-06-12 19:59:34
回答 2查看 626关注 0票数 3

我正在使用Redis (ROM) 这里

这是我的模型

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()

我得到了

搞不懂为什么会发生这种事?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-16 22:52:47

这有两部分。首先,如果要通过使用unique=True定义的列获取项,则不需要使用索引,但查询不同。使用unique=Trueindex=False,您可以通过使用User.get_by()表单获得项:

代码语言:javascript
复制
>>> User.get_by(name="Ankush")
<__main__.User object at 0x87070cc>

主要的限制是必须按照列中定义的那样传递完整的列。这通常有助于保持唯一的电子邮件地址(小写它们的第一!),用户名(注意你的大写),以及其他例子。

第二部分是在启用索引时,索引具有字符串/文本列的“不区分大小写的唯一单词”语义(我来自世界上的搜索引擎方面,它的语义与典型的db查询有很大的不同(也可以说更好)。因此,如果要查找条目,则需要使用:

代码语言:javascript
复制
>>> class User(rom.Model):
...     name = rom.String(required=True, unique=True, index=True)
...     nickname = rom.String(required=False)
...     photo = rom.String(required=False)
... 
>>> user1 = User(name="Ankush", nickname="iamankush", photo="http://graph.facebook.com/iamkhush/picture")
>>> user1.save()
>>> User.query.filter(name="ankush").all()
[<__main__.User object at 0x870738c>]

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

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

票数 3
EN

Stack Overflow用户

发布于 2014-06-13 14:29:34

您需要将index=True与名称一起传递,以允许过滤器对其进行查询。

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24192984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档