如何删除NDB数据库的StructuredProperty(或repeatedproperty)中的单个项?

2024-06-09 10:37:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个ndb.型号其中包含一个重复属性。在

class Resort(ndb.Model):
    name        = ndb.StringProperty()
    hotel_keys  = ndb.KeyProperty(repeated=True)

我把一张“钥匙”清单放在“旅馆钥匙”的财产里。 然后我需要删除其中的一个项目(比如按id) 我怎么能那样做?在

^{pr2}$

我会很感激你的帮助。谢谢。在


Tags: nametruemodel属性keyshotelrepeatedclass
3条回答

以下是一种不需要迭代和删除的方法:(仅适用于repeated keyproperty,因为它实际上有一个带有单个属性id的字符串表示;对于重复的结构化属性,您必须循环并检查要删除的属性get index and delete after the loop)

key_to_delete = ndb.Key(ModelOfThatId, id)

if key_to_delete in resort.hotel_keys:
    idx = resort.hotel_keys.index(key_to_delete)
    del resort.hotel_keys[idx]
    resort.put()

repeated属性只是一个列表,您要放入列表中的实体相当简单。所以你可以使用pop和index而不是循环。put()

dev~fish-and-lily> class Resort(ndb.Model):
...    hotel_keys = ndb.KeyProperty(repeated=True)
... 
dev~xxx-and-zzz> y = XX()
dev~xxx-and-zzz> y.hotel_keys.append(ndb.Key('abc',1))
dev~xxx-and-zzz> y.hotel_keys.append(ndb.Key('abc',2))
dev~xxx-and-zzz> y.hotel_keys.append(ndb.Key('abc',3))
dev~xxx-and-zzz> y.hotel_keys.index(ndb.Key('abc',3))
2
dev~xxx-and-zzz> y.hotel_keys.pop(2)
Key('abc', 3)
dev~xxx-and-zzz> y.hotel_keys
[Key('abc', 1), Key('abc', 2)]
dev~xxx-and-zzz> 

重复属性是列表,不可能同时迭代列表并从中删除值。您应该创建一个不带要删除的值的列表副本-请参阅以下问题:Remove items from a list while iterating

相关问题 更多 >