我正在使用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()
我得到了
搞不懂为什么会发生这种事?
发布于 2014-06-16 22:52:47
这有两部分。首先,如果要通过使用unique=True定义的列获取项,则不需要使用索引,但查询不同。使用unique=True和index=False,您可以通过使用User.get_by()表单获得项:
>>> User.get_by(name="Ankush")
<__main__.User object at 0x87070cc>主要的限制是必须按照列中定义的那样传递完整的列。这通常有助于保持唯一的电子邮件地址(小写它们的第一!),用户名(注意你的大写),以及其他例子。
第二部分是在启用索引时,索引具有字符串/文本列的“不区分大小写的唯一单词”语义(我来自世界上的搜索引擎方面,它的语义与典型的db查询有很大的不同(也可以说更好)。因此,如果要查找条目,则需要使用:
>>> 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.String和rom.Text密钥生成语义)。
发布于 2014-06-13 14:29:34
您需要将index=True与名称一起传递,以允许过滤器对其进行查询。
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)https://stackoverflow.com/questions/24192984
复制相似问题