创建App Engine数据存储区实体

时间:2013-01-14 16:38:38

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

我正在使用谷歌应用引擎,我正在尝试使用代码插入实体/表:

class Tu(db.Model):
    title = db.StringProperty(required=True)
    presentation = db.TextProperty(required=True)
    created = db.DateTimeProperty(auto_now_add=True)
    last_modified = db.DateTimeProperty(auto_now=True)

。 。

a = Tu('teste', 'bla bla bla bla')
        a.votes = 5
        a.put()

但是我收到了这个错误:

TypeError: Expected Model type; received teste (is str)

我正在关注此文档https://developers.google.com/appengine/docs/python/datastore/entities而我看不出我错在哪里。

2 个答案:

答案 0 :(得分:2)

您链接到所有使用关键字参数的文档:

a = Tu(title='tests', presentation='blablablah')

如果使用位置参数,则第一个参数被解释为父类,它必须是Model或Key类型。

答案 1 :(得分:2)

以这种方式创建模型时,需要对模型的所有属性使用关键字参数。以下是来自__init__的{​​{1}}签名的摘要,您的db.Model模型继承了该签名:

Tu

当您说def __init__(self, parent=None, key_name=None, _app=None, _from_entity=False, **kwds): """Creates a new instance of this model. To create a new entity, you instantiate a model and then call put(), which saves the entity to the datastore: person = Person() person.name = 'Bret' person.put() You can initialize properties in the model in the constructor with keyword arguments: person = Person(name='Bret') # continues 时,由于您没有提供关键字参数而是将它们作为位置参数传递,a = Tu('teste', 'bla bla bla bla')被分配给teste中的parent参数}(和__init__bla bla bla bla)因为那个参数需要一个key_name类型的对象(我假设你没有),你就会得到那个错误。假设您尝试将这些项目添加为Modeltitle,您会说(正如@DanielRoseman已经简洁地说过:)):

presentation