Я пытался создать объекты, обладающие свойством, которое должно быть уникальным или None что-то подобное:ОПРС VERIFY сущности уникальность в транзакции
class Thing(ndb.Model):
something = ndb.StringProperty()
unique_value = ndb.StringProperty()
Поскольку приводная радиостанция не имеет возможности указать, что свойство должно быть уникальным это только естественно, что я делаю это вручную, как это:
def validate_unique(the_thing):
if the_thing.unique_value and Thing.query(Thing.unique_value == the_thing.unique_value).get():
raise NotUniqueException
Это работает как шарм, пока я не хочу, чтобы это сделать в сделке NDB, который я использую для создания/обновления объектов. Как:
@ndb.transactional
def create(the_thing):
validate_unique(the_thing)
the_thing.put()
Однако ОПРС кажется только разрешить запросы по предку, проблема моя модель не имеет предка/родителя. Я мог бы сделать следующее, чтобы предотвратить эту ошибку от выскакивает:
@ndb.non_transactional
def validate_unique(the_thing):
...
Это чувствует себя немного неуместно, объявив что-то, чтобы быть сделки, а затем с один (важно) частью делаются за пределами сделки. Я хотел бы знать, если это путь, или если есть (лучше) альтернатива.
Также некоторое объяснение относительно того, почему ndb разрешает запросы предков, было бы неплохо.
Потому что это то, что происходит в хранилище данных. Вам нужно перестать думать о хранилище данных как реляционной базы данных; это не так, и вы можете получить только согласованные данные. –
Какое уникальное значение вы хотите сохранить? Если вы присвоите этому уникальному значению имя ключа, тогда легко убедиться в уникальности, поскольку имена ключей должны быть уникальными. –