我有一个大约20个对象的列表,对于每个对象,我返回一个包含10个词典的列表 我试图在GAE的列表中存储每个对象的10个词典列表;我不认为我正在编写代码以将此信息存储到GAE 这是我有的: 在我的主要请求处理程序之前,我有这个类:
class Tw(db.Model):
tags = db.ListProperty()
ip = db.StringProperty()
在我的主要请求处理程序中,我有以下内容:
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
我不确定这段代码是否完全是写的。如果有人能请求帮助,我将不胜感激。
答案 0 :(得分:4)
欢迎使用Stack Overflow!
我看到一些问题:
由于您无法在属性中存储原始字典,因此需要将其序列化为其他格式,如JSON或pickle。这是使用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)
稍后获取实体时,您可以使用pickle.loads(entity.tags)
检索词典列表。
答案 1 :(得分:4)
当我处理Google App Engine不直接支持的数据类型(如字典或自定义数据类型)时,我通常采用方便的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)
在PickleProperty
模块中宣布commons.py
课程后,您可以使用它来存储您的自定义数据:
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)
要检索数据,请执行以下操作:
entity.tags
答案 2 :(得分:4)
由于这是编写的,App Engine已经推出了他们的实验性“ndb”Python数据库模型,其中特别包含了JsonProperty,它可以很好地直接实现你想要的东西。
现在,你需要运行App Engine的Python 2.7版本,它仍然没有为生产做好准备,但这些天看起来都很稳定,GvR自己似乎写了很多代码哪个是bodes很好的代码质量,我打算在今年的某个时候在生产中使用它......