ndb how google engine delete create app python google-app-engine google-cloud-datastore app-engine-ndb

python - how - ndb properties



Google App Engine NDB: ¿cómo almacenar la estructura del documento? (2)

Puede usar ndb.JsonProperty para representar una lista de un diccionario o una cadena en su modelo. Puede echar un vistazo a la documentación para más información.

De la documentación de App Engine NDB:

La API NDB proporciona almacenamiento persistente en un datastore de objetos sin esquema. Es compatible con el almacenamiento en caché automático, consultas sofisticadas y transacciones atómicas. NDB es muy adecuado para almacenar registros de datos estructurados.

Quiero crear una estructura como la siguiente usando NDB, donde cada instancia se ve así:

{ city: ''SFO'' date: ''2013-01-27'' data: { ''keyword1'': count1, ''keyword2'': count2, ''keyword3'': count3, ''keyword4'': count4, ''keyword5'': count5, .... } }

¿Cómo puedo diseñar una entidad sin esquema en Google App Engine (GAE) usando NDB?
Soy nuevo en GAE y no estoy seguro de cómo lograr esto

Gracias


Si no necesita consultar los atributos en los datos, puede usar una de las propiedades mencionadas por @voscausa:

JsonProperty

class MyModel(ndb.Model): city = ndb.StringProperty() date = ndb.DateProperty() data = ndb.JsonProperty() my_model = MyModel(city="somewhere", date=datetime.date.today(), data={''keyword1'': 3, ''keyword2'': 5, ''keyword3'': 1,})

StructuredProperty:

class Data(ndb.Model): keyword = ndb.StringProperty() count = ndb.IntegerProperty() class MyModel(ndb.Model): city = ndb.StringProperty() date = ndb.DateProperty() data = ndb.StructuredProperty(Data, repeated=True) my_model = MyModel(city="somewhere", date=datetime.date.today(), data=[Data(keyword="keyword1", count=3), Data(keyword="keyword2", count=5), Data(keyword="keyword3", count=1)]) my_model.put()

El problema aquí es el filtrado de propiedades estructuradas. Las propiedades de la palabra clave se ven como matrices paralelas. Hacer una consulta como:

q = MyModel.query(MyModel.data.keyword==''keyword1'', MyModel.data.count > 4)

incluiría incorrectamente my_model .

https://developers.google.com/appengine/docs/python/ndb/queries#filtering_structured_properties

Usar un modelo de expansión funcionaría y le permitirá consultar palabras clave:

class MyModel(ndb.Expando): city = ndb.StringProperty() date = ndb.DateProperty() m = MyModel(city="Somewhere", date=datetime.date.today()) m.keyword1 = 3 m.keyword2 = 5 m.keyword3 = 1 m.put() q = MyModel.query(ndb.GenericProperty(''keyword1'') > 2)

https://developers.google.com/appengine/docs/python/ndb/entities#expando