GAE - 属性的get()实体?

时间:2013-04-17 15:59:16

标签: python google-app-engine google-cloud-datastore

我如何根据物业的实体获取数据存储实体?我是否必须经历多步过滤()get()过程?或者我可以通过1件get()来实现这一目标吗?

例如,假设我有数据存储模型频道:

class Channel(db.Model):
    name = db.StringProperty(required = True)

现在如果我想根据它的名字删除一个频道,我怎么能这样做:

name = "ch1"
channel = Channel.get("name = " name)
channel.delete()

此get语句不起作用。实现这一目标的实际方法是什么?非常感谢!

3 个答案:

答案 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))