Как создать уникальное свойство в python на движке приложений Google? - PullRequest
3 голосов
/ 27 ноября 2009

В некоторых технологиях баз данных для атрибута в записи вы можете гарантировать уникальность этого атрибута во всей базе данных. Примером этого может быть атрибут email_address в записи пользователя. Установив для email_address значение «уникальный», вы гарантируете, что определенный адрес электронной почты может появляться только в одной записи во всей базе данных.

Есть ли способ в google app engine иметь уникальные свойства для данной модели? Например, могу ли я иметь сущность User (db.Model) со свойством электронной почты, которое гарантированно уникально для всего хранилища данных?

Я нашел этот ресурс здесь , который может оказаться полезным.

Ответы [ 3 ]

4 голосов
/ 27 ноября 2009

Единственная помощь, которую вы получаете от хранилища данных GAE в отношении «уникальности», - это ключи сущностей - но потом, я вижу, URL, который вы цитируете, также заметил это и показывает один из способов использовать этот факт. Чтобы получить что-то большее, чем ключи, вам необходимо выполнить свои проверки на уровне приложения (перед тем, как поместить объект или изменить уникальный набор свойств, вы делаете подходящий запрос [[key-only for speed]] и проверяете, что он пусто), но это довольно дорого (и трудно сделать транзакции безопасными).

2 голосов
/ 28 июня 2010

Я реализовал это следующим образом, переопределив метод put и используя key.name

class Program(db.Model):
    name = db.StringProperty("Title")
    slug = db.StringProperty("Slug")
    def put(self):
        if Program.get_by_key_name(self.slug):
            raise UniqueConstraintViolation("slug", self.slug)
        self._key_name = self.slug
        return db.Model.put(self)


class UniqueConstraintViolation(Exception):
    def __init__(self, scope, value):
        super(UniqueConstraintViolation, self).__init__("Value '%s' is not unique within scope '%s'." % (value, scope, ))

Я сохраняю слаг как key.name и, если вы попытаетесь добавить другую программу, она проверит, существует ли имя ключа. Вероятно, это не очень хороший способ, я также новичок в python / app engine.

Это хорошая статья о ком-то, кто использует вспомогательную модель: http://squeeville.com/2009/01/30/add-a-unique-constraint-to-google-app-engine/

Редактировать: Я видел, что вы также предоставили эту статью LOL.

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