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 …

  • Wie konvertiert man eine Zeitzeichenfolge in einem Google AppEngine db.TimeProperty?
  • So reduzieren Sie die Anzahl der Anfragen an den Datenspeicher
  • So aktualisieren Sie ein Schema des NDB-Modells
  • Wie bekomme ich am besten ein Datum / eine geographische Proximity-Abfrage auf GAE?
  • Kaufen Sie viele Produkte sofort aus einem Webshop
  • Google App Engine versucht, auf dev Daten zuzugreifen
  • Wie man mehr als 1000 holt?
  • Wie man eine Vertragsdatenbank (mit mehreren Käufern oder Verkäufern) mit GAE-Datenspeicher modelliert
  • ORM für Google Cloud-Datenspeicher
  • Google App Engine-Datenspeicher: Umgang mit eventueller Konsistenz
  • Google App Engine Singletons (Python)
  • Python ist die beste Programmiersprache der Welt.