2010-12-13 57 views
0

J'ai une table quelque chose commece qui est faux dans cette requête

class BulkStore(PresageBaseModel): 
    store_key = db.StringProperty(required=True) 
    name = db.StringProperty(required=True) 

Mais quand je fais une recherche sur store_key il ne retourne rien

sk = 'agd2b3hhdWxhcjcLEhZwcmVzYWdlX2FwcF9jb2xsZWN0aW9uIhtwcmVzYWdlX2RlbW9fY29sbGVjdGlvbl9rZXkM' 
print BulkStore.all().filter('store_key',sk).fetch(1) 

sortie:

[] 

mais la recherche manuelle obtient le bon résultat

for bulkStore in BulkStore.all(): 
    if bulkStore.store_key == sk: 
     print bulkStore 

sortie:

BulkStore(key_id=849L, store_key=u'agd2b3hhdWxhcjcLEhZwcmVzYWdlX2FwcF9jb2xsZWN0aW9uIhtwcmVzYWdlX2RlbW9fY29sbGVjdGlvbl9rZXkM', name=u'collection_record_export') 

Qu'est-ce que je peux être absent?

Répondre

1

Raison pour cela bug est que si une propriété qui est déjà un autre type db est affectée à une propriété, elle prend mystérieusement le type de cette valeur, par ex. dans mon modèle BulkStore store_key est un StringProperty mais si je lui assigne une valeur qui est TextProperty, store_key est stocké comme TextProperty non StringProperty que je l'ai défini et plus tard sur requête sur ces propriétés ne fonctionne pas, donc dans db vous pouvez avoir des entités dont certaines seront consultables et d'autres ne le seront pas.

donc jamais faire ce

bulkstore.store_key = some_entity.some_text_value 

font place ce

bulkstore.store_key = str(some_entity.some_text_value) 

Cela peut être un bug très subtil à trouver dans le code :(

3

Dans l'un de vos exemples, la chaîne se termine par ., dans l'autre, elle ne l'est pas. Ce ne sont pas des chaînes égales.

+0

qui était une erreur de copier-coller et a été un exemple pour montrer ce qui ne fonctionne pas, j'utilise la même variable de deux manières dont une fonctionne l'autre ne fonctionne pas? –