Speichern Sie eine Liste der Wörterbücher in GAE

Ich habe eine Liste von etwa 20 Objekten und für jedes Objekt gib ich eine Liste von 10 Wörterbüchern zurück.
Ich versuche, die Liste der 10 Wörterbücher für jedes Objekt in der Liste auf GAE zu speichern; Ich glaube nicht, dass ich den Code richtig schreibe, um diese Informationen an GAE zu speichern.
Hier ist was ich habe: Vor meinem Hauptanforderungshandler habe ich diese Klasse:

class Tw(db.Model): tags = db.ListProperty() ip = db.StringProperty() 

In meinem Hauptanforderungshandler habe ich folgendes:

 for city in lst_of_cities: # this is the list of 20 objects dict_info = hw12.twitter(city) # this is the function to get the list of 10 dictionaries for each object in the list datastore = Tw() # this is the class defined for db.model datastore.tags.append(dict_info) # datastore.ip = self.request.remote_addr datastore.put() data = Data.gql("") #data entities we need to fetch 

Ich bin mir nicht sicher, ob dieser Code überhaupt geschrieben ist. Wenn jemand bitte helfen könnte, wäre es sehr geschätzt.

3 Solutions collect form web for “Speichern Sie eine Liste der Wörterbücher in GAE”

Willkommen bei Stack Overflow!

Ich sehe ein paar Fragen:

  1. Wörterbücher werden keine Werttypen für App Engine-Eigenschaften unterstützt.
  2. Sie speichern nur die letzte Entität; Der Rest wird verworfen.
  3. Du benutzt eine ListProperty, aber anstatt jedes Element von dict_info anzuhängen, machst du ein einziges Append der gesamten Liste.

Da du kein rohes Wörterbuch in einer Eigenschaft speichern kannst, musst du es auf ein anderes Format, wie JSON oder Pickle, serialisieren. Hier ist ein überarbeitetes Beispiel mit Pickle:

 from google.appengine.ext import db import pickle class Tw(db.Model): tags = db.BlobProperty() ip = db.StringProperty() entities = [] for city in lst_of_cities: dict_info = hw12.twitter(city) entity = Tw() entity.tags = db.Blob(pickle.dumps(dict_info)) entity.ip = self.request.remote_addr entities.append(entity) db.put(entities) 

Wenn du die Entität später pickle.loads(entity.tags) , kannst du deine Liste der Wörterbücher mit pickle.loads(entity.tags) .

Wenn ich mit Datentypen umgehen, die nicht direkt von Google App Engine wie Wörterbüchern oder benutzerdefinierten Datentypen unterstützt werden, PickleProperty ich normalerweise die handliche PickleProperty .

 from google.appengine.ext import db import pickle class PickleProperty(db.Property): def get_value_for_datastore(self, model_instance): value = getattr(model_instance, self.name, None) return pickle.dumps(value) def make_value_from_datastore(self, value): return pickle.loads(value) 

Sobald die PickleProperty Klasse in deinem commons.py Modul commons.py , kannst du es verwenden, um deine benutzerdefinierten Daten mit so etwas zu speichern:

 from google.appengine.ext import db from commons import PickleProperty class Tw(db.Model): tags = PickleProperty() ip = db.StringProperty() entities = [] for city in lst_of_cities: dict_info = hw12.twitter(city) entity = Tw() entity.tags = dict_info entity.ip = self.request.remote_addr entities.append(entity) db.put(entities) 

Um die Daten zurückzuholen gehen mit:

 entity.tags 

Da dies geschrieben wurde, hat die App Engine ihr experimentelles "ndb" Python-Datenbankmodell, das insbesondere das JsonProperty enthält, herausgedrängt, was ziemlich gut direkt implementiert, was Sie wollen.

Jetzt musst du die Python 2.7 Version der App Engine laufen lassen, die noch nicht ganz fertig für die Produktion ist, aber alles scheint ziemlich stabil in diesen Tagen, GvR selbst scheint zu schreiben, eine Menge von Code, der gut für die Code-Qualität, und ich beabsichtige, dies in der Produktion irgendwann in diesem Jahr zu verwenden …

  • Hochgeladene Datei in GAE Appengine mit Python anzeigen
  • Das neueste Datenelement erhalten - Google App Engine - Python
  • AppEngine: Datenspeicher für Datensätze mit <fehlenden> Wert abfragen
  • Setzen Sie einen Namen ganz unabhängig vom Modellnamen (App Engine-Datenspeicher)
  • Wie kann ich die Gültigkeit eines ReferenceProperty in Appengine testen?
  • Db.ReferenceProperty () vs ndb.KeyProperty in der App Engine
  • Wie entriegel ich die App-Engine-Datenbank, wenn localhost läuft?
  • Benutzerdefinierte Eigenschaften wurden nicht korrekt für Expando-Modelle in wiederholten StructuredProperty gespeichert
  • Zu viele schreiben Ops
  • Lesen und Schreiben Operationen mit ComputedProperty in GAE NDB beteiligt
  • "Zu viel Konkurrenz" beim Erstellen neuer Entität im DataStore
  • Python ist die beste Programmiersprache der Welt.