App Engine - 在运行时指定实体名称

时间:2011-05-03 05:06:01

标签: python google-app-engine entity

在低级Java api中,我曾经能够在运行时组成实体名称。

在python中,似乎我必须预先定义一个也是我的实体名称的类名:

class SomeKindaData(db.Expando):
    pass

sKD = SomeKindaData(key_name='1')
...

有没有办法在App Engine for Python中运行时创建实体名称?

2 个答案:

答案 0 :(得分:3)

我对App Engine知之甚少,但您可以在运行时定义类,如下所示:

def get_my_class(name):
    return type(name, (db.Expando,), {})

所以type有三个参数:

  • 班级名称
  • 继承自
  • 的类的元组
  • 类属性字典

答案 1 :(得分:2)

实体本身没有名称。在数据存储区中,实体由密钥标识,密钥可以具有名称或ID。您在示例代码中将实体的密钥名称设置为“1”。实体也按种类分类,在本例中为SomeKindaData。

db.Model和db.Expando在数据存储区周围提供本地ORM抽象。使用这些时,默认情况下,您的实体的类名称将设置为您的模型类名称。如果您不想在创建实体之前定义模型类,则可以使用the low-level datastore API

from google.appengine.api import datastore

sKD = datastore.Entity(kind='SomeKindaData', name='1')
sKD['SomeProperty'] = 'SomeValue'
datastore.Put(sKD)