Отношения в App Engine Один-ко-многим
Этот тип отношений легко реализуется в любой системе. Платформа App Engine обеспечивает хранение ключа стороны «один» в сущности со стороны «многие». В Питоне для этого используется поле-ссылка ReferenceProperty:
class Owner(db.Model):
name = db.StringProperty()
class Pet(db.Model):
name = db.StringProperty()
owner = db.ReferenceProperty(Owner)
Чтобы найти «владельца» для «питомца», мы обращаемся к атрибуту pet.owner, и App Engine автоматически загружает сущность, на которую мы ссылаемся. Чтобы найти всех «питомцев», ссылающихся на конкретного «владельца», достаточно выполнить следующий запрос:
pets = Pet.all().filter('owner =', owner).fetch(100)
Аналогичный результат можно получить проще: ReferenceProperty автоматически создает свойство в классе Owner для быстрого и удобного доступа к связанным данным, так что извлечь список «питомцев» можно так:
pets = Owner.owner_set.fetch(100)
По умолчанию, App Engine именует это свойство как имя поля + "_set", но вы можете задать свое собственное:
class Pet(db.Model):
name = db.StringProperty()
owner = db.ReferenceProperty(Owner, collection_name='pets')
pets = owner.pets.fetch(100)
Другой способ моделирования отношения «один-ко-многим» — это привязка сущности к родителю. В момент создания сущности ей может быть назначен родитель. При этом ключ сущности-родителя становится частью ключа-потомка и не может быть изменен в будущем. Вот как это выглядит в нашем примере:
class Owner(db.Model):
name = db.StringProperty()
class Pet(db.Model):
name = db.StringProperty()
bob = Owner(name='Bob')
felix = Pet(name='Felix', parent=bob)
owner_of_felix = felix.parent
Далее мы нигде явно не указываем связь между сущностями — она следует из указания родителя на момент создания. Когда лучше использовать привязку к родителю (parent) вместо поля-ссылки (ReferenceProperty)? Это влияет на работу транзакций: в App Engine в каждой отдельной транзакции можно оперировать сущностями только одной группы, т.е. множеством сущностей с родителем из той же группы. Если требуется, чтобы в транзакцию не попадали связанные сущности, используйте поле-ссылку. Кроме того, помните, что сущность может иметь только одного непосредственного родителя, и его ключ не может быть изменен после создания.
- 7. Что такое электронная таблица?
- Ввод и редактирование данных
- Формат данных
- Функции и формулы
- Понятие формулы
- Понятие функции
- Мастер функций
- [Править]Применение в серверных приложениях
- [Править]Мультиплексирование
- Методы и средства защиты от несанкционированного доступа
- Криптография и шифрование Что такое шифрование
- Основные термины и определения криптографии
- Открытые ключи
- Проблемы использования открытых/закрытых ключей
- Сертификат
- [Править]Центры доверия
- Создание отчётов
- Изменение структуры отчёта
- Создание таблиц в режиме конструктора
- Формирование запросов на выборку
- Параметрические запросы
- Запросы на обновление
- Редактирование запросов
- Поля и записи
- Порядковые типы
- Целые типы
- Символьные типы
- Булевы типы
- Перечислимые типы
- Поддиапазонные типы
- Действительные типы
- [Править]Использование в форматах файлов
- 3.1. Выполнение задания
- 6.2 Построитель выражений
- Создание кнопочной формы с помощью диспетчера кнопочных форм
- Примечания
- Групповые функции в операторе select:
- Раторы сравнения
- Виды отношений
- Отношения в App Engine Один-ко-многим
- Один-к-одному
- Многие-ко-многим
- 2. Свойства алгоритмов.
- Вывод «Основные свойства алгоритмов»:
- 3. Способы описания алгоритмов.
- Тестирование программного обеспечения
- [Править]Уровни тестирования
- [Править]Статическое и динамическое тестирование
- [Править]Регрессионное тестирование
- [Править]Тестовые скрипты
- [Править]Тестирование «белого ящика» и «чёрного ящика»
- [Править]Покрытие кода
- Обеспечение целостности базы данных
- Электронная почта (e-mail)
- Группы новостей
- Службы мгновенных сообщений
- Основы tcp/ip
- Краткое описание протоколов семейства tcp/ip с расшифровкой аббревиатур
- Архитектура tcp/ip
- Уровни сетей и протоколы tcp/ip
- Краткое заключение