Запрос к базе данных с «первичным ключом» в GoogleAppEngine? - PullRequest
0 голосов
/ 23 февраля 2011

Я создал приложение для гостевой книги, используя Google App Engine (GAE): python, и клиент работает на iPhone.

Имеет возможность писать сообщения на доске с ником.
У организации есть 3 поля:

  1. ник
  2. дата
  3. сообщение

И я собираюсь сделать еще одну функцию, чтобы пользователь мог публиковать ответ (или комментировать) на сообщение.

Но для этого, я думаю, должен существовать «первичный ключ» сущности гостевой книги, чтобы я мог поместить некоторую информацию об ответе в сообщение.

С этими тремя полями я не могу получить только одно сообщение из базы данных.

Я новичок в базе данных. Сохраняет ли база данных какой-либо индекс автоматически? или это должно быть сделано пользователем?

И если это делается автоматически самой базой данных (или нет), как я могу получить только один объект с ключом ??

И я также хочу получить совет о том, как сделать функцию ответа вообще. Спасибо, что прочитали.

Ответы [ 2 ]

1 голос
/ 23 февраля 2011

Каждый объект имеет ключ, он содержит информацию, такую ​​как тип объекта, его пространство имен, родительские объекты и, что наиболее важно, уникальный идентификатор (необязательно определяемый пользователем).

Вы можете получитьключ сущности с использованием метода key, который есть у всех сущностей.

message.key()

Ключ можно преобразовать в строку URL-адреса и обратно.

message_key = str(message.key())
message = Message.get(message_key)

Если ключимеет указанный пользователем уникальный идентификатор (имя ключа), доступ к нему можно получить следующим образом

message.key().name()

В качестве альтернативы, если имя ключа не указано, идентификатор будет назначаться автоматически.

message.key().id()

Чтобы назначить имя ключа для объекта, вы должны указать его при создании объекта, после чего вы не сможете добавлять / удалять или изменять имя ключа.

message = Message(key_name='someusefulstring', content='etc')
message.put()

После этого вы сможетечтобы получить сообщение из хранилища данных, используя имя ключа

message = Message.get_by_key_name('someusefulstring')

Используйте свойство db.ReferenceProperty для хранения ссылки на другой объект (может быть любого типа)

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

1 голос
/ 23 февраля 2011

У каждой сущности есть ключ. Если вы не назначаете имя_ключа при создании сущности, частью ключа является автоматически назначаемый числовой идентификатор. Свойства, отличные от длинных текстовых полей, автоматически индексируются, если не указано иное.

Чтобы получить сущность, если вы знаете ключ, вы просто делаете db.get(key). Для ответов вы, вероятно, захотите использовать db.ReferenceProperty в объекте ответа, чтобы указать на родительское сообщение; это автоматически создаст запрос обратной ссылки в сообщении для получения ответов.

...