Python GAE-get()实体是否按属性?

Python GAE-get()实体是否按属性?,python,google-app-engine,google-cloud-datastore,Python,Google App Engine,Google Cloud Datastore,如何基于属性的实体获取数据存储实体?我是否必须经历一个多步骤的filter()get()过程?或者我可以通过1件式get()来实现这一点吗 例如,假设我有数据存储模型通道: class Channel(db.Model): name = db.StringProperty(required = True) 现在,如果我想根据频道名称删除频道,我该如何执行以下操作: name = "ch1" channel = Channel.get("name = " name) channel.de

如何基于属性的实体获取数据存储实体?我是否必须经历一个多步骤的filter()get()过程?或者我可以通过1件式get()来实现这一点吗

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

class Channel(db.Model):
    name = db.StringProperty(required = True)
现在,如果我想根据频道名称删除频道,我该如何执行以下操作:

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

这个get语句不起作用。实现这一目标的实际方法是什么?多谢各位

这是根据属性检索实体的方法

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)

如果你这样做,你最好稍微改变一下你的设计。如果您是按名称获取频道,那么使用频道名称作为密钥名称将更容易(更快、更便宜)

创建实体时,只需传递
key\u name
参数(从中借用的示例):

拿着它

k = Key.from_path('Employee', 'asalieri')

拥有密钥后,所有其他操作都可以照常进行。

如果名称字段是唯一标识实体的字段,最好将其用作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))

有道理。但是没有像get()那样的返回优先实体版本?您必须返回一个iterable,即使它只有一个entity?查询,返回一个iterable,您必须使用get_by_id()或。如果确定每个通道的名称都是唯一的,则可以将其指定为实体的键名称。@golmschenk是的,您也可以使用get()。
db.delete(Channel.all(keys_only=True).fetch(1000))