Chcę uzyskać klucz encji znający identyfikator jednostki i przodka. ID jest unikalne w obrębie grupy encji zdefiniowanej przez przodka. Wydaje mi się, że nie jest to możliwe przy użyciu interfejsu ndb. Rozumiem, że datastore może być spowodowane faktem, że ta operacja wymaga wykonania pełnego skanowania indeksu. Obejście, którego użyłem, polega na utworzeniu obliczonej właściwości w modelu, która będzie zawierała część identyfikatora klucza. Jestem w stanie teraz zrobić kwerendę przodka i uzyskać kluczKlucz podmiotu pobierającego ndb o identyfikatorze bez rodzica
class SomeModel(ndb.Model):
ID = ndb.ComputedProperty(lambda self: self.key.id())
@classmethod
def id_to_key(cls, identifier, ancestor):
return cls.query(cls.ID == identifier,
ancestor = ancestor.key).get(keys_only = True)
wydaje się działać, ale czy są jakieś lepsze rozwiązania tego problemu?
Aktualizacja Wydaje się, że dla magazynu danych naturalnym rozwiązaniem jest użycie pełnych ścieżek zamiast identyfikatorów. Początkowo myślałem, że będzie to zbyt uciążliwe. Po przeczytaniu odpowiedzi Dragonx przeprojektowałem moją aplikację. Ku mojemu zdziwieniu wszystko wygląda teraz znacznie prościej. Dodatkowymi korzyściami są to, że moje podmioty wykorzystają mniej miejsca i nie będę potrzebować dodatkowych indeksów.
Brzmi jak masz właściwą odpowiedź! –
ID to _nie_ gwarantowane unikalne w ramach grupy encji - tylko dla danej jednostki nadrzędnej. –