这个查询有什么问题

时间:2010-12-13 15:31:56

标签: google-app-engine

我有一张类似

的表格
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')

我可能缺少什么?

2 个答案:

答案 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)

这可能是在代码中找到的一个非常微妙的错误:(

相关问题