2010-02-17 4 views
6

Я пытаюсь получить данные из хранилища данных приложения.App Engine, Python: как фильтровать запрос по ID?

Фильтрация запроса по 'название' (или любое другое имущество) работы:

obj = db.Query(PageModel).filter('title',title)[0] 

Но то же самое с ID - это не так:

obj = db.Query(PageModel).filter('ID',page_id)[0] 

Я думаю, что есть что-то особенное ID и KEYs в хранилище данных, но я не могу найти, как реализовать получение данных по ID.

+0

Потребляет больше информации. Контекст? Каковы эти атрибуты? –

ответ

13

Попробуйте

obj = PageModel.get_by_id(page_id) 

вместо этого. Это предполагает, что идентификатор, с которым вы работаете, - это числовой идентификатор ключа хранилища данных (т. Е. Произошел от чего-то вроде obj.key().id()), а не какое-то произвольное поле идентификатора, которое вы добавили в свой PageModel.

+0

http://code.google.com/appengine/docs/python/datastore/modelclass.html#Model_get_by_id – Ryan

2

Вы можете фильтровать данные с помощью ключа (ы):

from google.appengine.ext.db import Key 
key = Key('bgakaWdyc3NlcnIPCxIJRmVlZEVudHJ5GAwM') 

# Match many 
PageModel.all().filter('__key__ IN ', [key]) 
# Match one 
PageModel.all().filter('__key__ = ', key) 

Однако предпочтительным является способ get_by_id (ID) при выборке одной записи.

Смежные вопросы