Как получить список имен ключей в движке приложений Python / Google? - PullRequest
1 голос
/ 23 марта 2011

В движке приложений Python / Google я хотел бы сохранить свойство в качестве ключевого имени, чтобы сэкономить ресурсы и ускорить процесс. Но я не знаю, как получить список имен ключей.

В качестве примера рассмотрим модель данных:

class Book(db.Model):
    isbn = db.StringProperty() # Make this a key name instead.
    category = db.StringProperty()
    author = db.StringProperty()
    title = db.StringProperty()
    ...

Теперь допустим, что я установил имя ключа в isbn вместо того, чтобы сделать его именем свойства:

new_book = Book(category="fantasy,comedy", title="The Light Fantastic", author="Terry Pratchett", key_name=isbn_number)

Полагаю, что если бы я мог найти способ получения списка имен ключей, я бы сэкономил ресурсы? Например, при проверке, находится ли конкретная книга в коллекции.

Это правильно, и как я могу получить список имен ключей?

Если это не так, то неплохим компромиссом будет следующее:

class ISBN(db.Model):
    isbn = db.StringProperty()

class Book(db.Model):
    isbn = db.ReferenceProperty(ISBN)
    category = db.StringProperty()
    author = db.StringProperty()
    title = db.StringProperty()
    ...  

Будет ли это экономить ресурсы / будет быстрее?

Ответы [ 3 ]

3 голосов
/ 23 марта 2011

Для первого подхода ISBN в качестве ключа:

class Book(db.Model):
    #isbn is key, so it shouldn't be a property
    category = db.StringProperty()
    author = db.StringProperty()
    title = db.StringProperty()

new_book = Book(category="fantasy,comedy", title="The Light Fantastic", author="TerryPratchett", key_name=isbn_number)

Затем получаем список всех номеров ISBN:

isbns = [b.name() for Book.all(keys_only=True)]
1 голос
/ 23 марта 2011

Создание книги

b = Book(key_name='isbn:0134815100494', **props)
b.put()

* 1004 Запросы *

keys = Book.all(keys_only=True).fetch(100)
key_names = [key.name() for key in keys]

Ищите keys_only и key_name при поиске

1 голос
/ 23 марта 2011

Вам не нужен список имен ключей для вашего варианта использования.

Если вы хотите увидеть, есть ли книга в базе данных, просто наберите Book.get_by_key_name(someISBN).Также есть get_or_insert для записи, которая будет проверять, есть ли добавляемый объект в базе данных, записывать его, если это не так, и возвращать его, если он есть.

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