请帮助我理解这一点:
在v1.6.6上,它位于google/appengine/ext/db/__init__.py
的第2744行:
class UnindexedProperty(Property):
"""A property that isn't indexed by either built-in or composite indices.
TextProperty and BlobProperty derive from this class.
"""
def __init__(self, *args, **kwds):
"""Construct property. See the Property class for details.
Raises:
ConfigurationError if indexed=True.
"""
self._require_parameter(kwds, 'indexed', False)
kwds['indexed'] = True
super(UnindexedProperty, self).__init__(*args, **kwds)
.
.
.
将索引参数约束为False后 - 将它们设置为True!
答案 0 :(得分:4)
在1.2.2之前,您可以对任何属性类型(甚至是Text和Blob)进行过滤查询。他们只返回空列表,但它有效。版本1.2.2引入了属性的indexed
属性,允许您禁用所选属性的索引[1]。从那时起,您要查询的属性必须被索引,否则将引发异常。
我们知道Text和Blob属性无法编入索引。不改变任何其他内容,对这些属性的查询将引发1.2.2的异常(他们之前没有)。为了不引入回归并破坏现有应用,行kwds['indexed'] = True
已添加到UnindexedProperty
类。
如果我们可以控制所有依赖代码,那么开始引发异常将是一个更清晰的解决方案。但是,鉴于没有破坏现有的应用程序,它决定修补它。
您可以自行尝试将kwds['indexed'] = True
更改为kwds['indexed'] = False
并运行此代码段:
from google.appengine.ext import db
class TestModel(db.Model):
text = db.TextProperty()
TestModel(text='foo').put()
print TestModel.all().filter('text =', 'foo').fetch(10)
[1] http://code.google.com/p/googleappengine/source/browse/trunk/python/RELEASE_NOTES#1165