我如何根据物业的实体获取数据存储实体?我是否必须经历多步过滤()get()过程?或者我可以通过1件get()来实现这一目标吗?
例如,假设我有数据存储模型频道:
class Channel(db.Model):
name = db.StringProperty(required = True)
现在如果我想根据它的名字删除一个频道,我怎么能这样做:
name = "ch1"
channel = Channel.get("name = " name)
channel.delete()
此get语句不起作用。实现这一目标的实际方法是什么?非常感谢!
答案 0 :(得分:1)
这是您根据属性
检索实体的方法q = db.Query(Channel)
q.filter("name =", name)
entities = q.fetch(100) # The number of entities you want to be returned
if entries:
db.delete(entries)
答案 1 :(得分:1)
如果你这样做,你最好稍微改变你的设计。如果您按名称获取频道,那么使用频道名称作为键名将更容易(也更快,更便宜)。
创建实体时只需传递key_name
参数(从docs借来的示例):
employee = Employee(key_name='asalieri',
first_name='Antonio',
last_name='Salieri')
用
获取k = Key.from_path('Employee', 'asalieri')
获得密钥后,所有其他操作都可以照常进行。
答案 2 :(得分:0)
如果name字段唯一标识实体,最好将其用作Sudhir所述的密钥。但是,如果有多个实体具有相同的名称,则需要先获取它们
all = Channel.all(keys_only=True).fetch(1000) # only need key to delete
db.delete(all)
一行版
db.delete(Channel.all(keys_only=True).fetch(1000))