что не так в этом запросе - PullRequest
0 голосов
/ 13 декабря 2010

У меня есть таблица, похожая на

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 ]

3 голосов
/ 13 декабря 2010

В одном из ваших примеров строка заканчивается на ., в другом - нет.Это не равные строки.

1 голос
/ 16 декабря 2010

Причина этого ошибка в том, что если свойству присвоено значение, которое уже является другим типом БД, оно таинственным образом принимает тип этого значения, например, в моей модели BulkStore store_keyStringProperty, но если я присваиваю ему значение TextProperty, store_key сохраняется как TextProperty, а не StringProperty, которым я определил его, и в дальнейшем запрос по таким свойствам не работает, поэтому в БД вы можете иметь объекты, некоторые из которых будутбыть доступным для поиска, а некоторые не будут.

, поэтому никогда не делайте этого

bulkstore.store_key = some_entity.some_text_value

, вместо этого сделайте это

bulkstore.store_key = str(some_entity.some_text_value)

Это может быть очень тонкой ошибкой, чтобы найти вкод: (

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...