我有一张类似
的表格class BulkStore(PresageBaseModel):
store_key = db.StringProperty(required=True)
name = db.StringProperty(required=True)
但是当我在store_key
上查询时,它不会返回任何内容
sk = 'agd2b3hhdWxhcjcLEhZwcmVzYWdlX2FwcF9jb2xsZWN0aW9uIhtwcmVzYWdlX2RlbW9fY29sbGVjdGlvbl9rZXkM'
print BulkStore.all().filter('store_key',sk).fetch(1)
输出:
[]
但手动搜索会得到正确的结果
for bulkStore in BulkStore.all():
if bulkStore.store_key == sk:
print bulkStore
输出:
BulkStore(key_id=849L, store_key=u'agd2b3hhdWxhcjcLEhZwcmVzYWdlX2FwcF9jb2xsZWN0aW9uIhtwcmVzYWdlX2RlbW9fY29sbGVjdGlvbl9rZXkM', name=u'collection_record_export')
我可能缺少什么?
答案 0 :(得分:3)
在您的一个示例中,字符串以.
结尾,而在另一个示例中则不然。这些不是相同的字符串。
答案 1 :(得分:1)
此 bug 的原因是,如果为属性分配了一个已经是另一个数据库类型的值,则会神秘地采用该值的类型,例如在我的BulkStore模型中,store_key是一个StringProperty,但是如果我为它分配一个TextProperty值,则store_key被存储为TextProperty而不是StringProperty我已经定义了它,以后稍后查询这些属性不起作用,所以在db中你可以有实体,其中一些将是可搜索的,有些将不会。
所以永远不要这样做
bulkstore.store_key = some_entity.some_text_value
而不是这样做
bulkstore.store_key = str(some_entity.some_text_value)
这可能是在代码中找到的一个非常微妙的错误:(