2015-12-23 3 views
0

У меня есть класс пользователяне в состоянии извлечь данные из хранилища данных GAE

class User(db.Model): 
    userId = db.StringProperty() 
    email = db.StringProperty() 
    channelToken = db.StringProperty() 

Я вставил запись с

user = User(key_name='1',userId='1',email='[email protected]',channelToken='123') 
user.put() 

Он прекрасно вставлен. Но теперь, когда я пытаюсь получить его, он показывает ошибку

channelToken= db.GqlQuery("SELECT channelToken FROM User WHERE userId=1") 
logging.info("Found Channel : " + str(channelToken)) 

он показывает

<google.appengine.ext.db.GqlQuery object at 0xfe112370>" is not a string. 

Я делаю что-то не так?

+1

как ответ сказал, 'получить()' возвращает один экземпляр, где '.fetch()' Возвращает список найденных экземпляров. –

+0

, если вы знаете, что ваш идентификатор пользователя уникален, затем сохраните идентификатор пользователя в ключевом имени, а затем используйте команду get вместо выполнения запроса, тогда вам не придется беспокоиться о возможной последовательности. –

ответ

2

Ссылаясь https://cloud.google.com/appengine/docs/python/datastore/gqlqueryclass#GqlQuery

q = db.GqlQuery("SELECT channelToken FROM User WHERE userId=1") 
channelToken = q.get() 

Каротаж давал ячейку памяти, потому что GqlQuery возвращает объект.

+0

спасибо! это работает. Как удалить конкретную запись? –

+0

@SunilGarg check mine .. –

+1

См. Документацию здесь: https://cloud.google.com/appengine/docs/python/datastore/modelclass#Model_delete –

1

Вы также можете использовать gql.

channelToken = User.gql("WHERE userId = :1", "1").get().channelToken 

Чтобы удалить все записи, которые имеют userId = 1

users = User.gql("WHERE userId = :1", "1").fetch() 
for user in users: 
    user.key.delete()