我无法从Google App Engine中取消对象。我正在运行Windows 7.这是程序:
pickle.dumps([[('CS', 2110), ('CS', 3300), ('CS', 3140)]])
,或类似的参数。CSV看起来像这样:
INFO,2210,"CS 2110, 3300, 3140","(lp0
(lp1
(S'CS'
p2
I2110
tp3
a(g2
I3300
tp4
a(g2
I3140
tp5
aa."
CS,3110,CS 2110 or equivalent experience,"(lp0
(lp1
(S'CS'
p2
I2110
tp3
aa."
MSE,4102,"MATH 2210, 2230, 2310, or 2940","(lp0
(lp1
(S'MATH'
p2
I2210
tp3
a(g2
I2230
tp4
a(g2
I2310
tp5
aa(lp6
(g2
I2940
tp7
aa."
(是的,这些是\n
生成的pickle.dumps()
)
appcfg.py upload_data --config_file="DataLoader.py" --filename="pre_req_data.csv" --kind=Course --url=http://localhost:8083/remote_api "appdir"
课程模式:
class Course(db.Model):
dept_code = db.StringProperty()
number = db.IntegerProperty()
raw_pre_reqs = db.StringProperty(multiline=True)
original_description = db.StringProperty()
def getPreReqs(self):
pickle.loads(str(self.raw_pre_reqs))
DataLoader.py :
class CourseLoader(bulkloader.Loader):
def __init__(self):
bulkloader.Loader.__init__(self, 'Course',
[('dept_code', str),
('number', int),
('original_description', str),
('raw_pre_reqs', str)
])
loaders = [CourseLoader]
尝试演绎:
类MainHandler(webapp.RequestHandler):
def get(self):
self.writeOut('cock!')
self.writeOut('\n')
courses = Course().all()
for c in courses:
self.writeOut("%s => %s" % (c.raw_pre_reqs, c.getPreReqs()))
def writeOut(self, string):
self.response.out.write(string)
观察错误:
追踪(最近一次呼叫最后一次):
文件“C:\ Program Files \ Google \ google_appengine \ google \ appengine \ ext \ webapp__init __。py”,第511行,致电 handler.get(*基团)
文件“main.py”,第30行,在get中 self.writeOut(“%s =>%s”%(c.raw_pre_reqs,c.getPreReqs()))
文件“src \ Models.py”,第17行,在getPreReqs中 pickle.loads(STR(self.raw_pre_reqs))
文件“C:\ Python26 \ lib \ pickle.py”,第1374行,在加载中 返回Unpickler(文件).load()
加载文件“C:\ Python26 \ lib \ pickle.py”,第858行 dispatchkey
文件“C:\ Python26 \ lib \ pickle.py”,第966行,在load_string中 提出ValueError,“不安全的字符串pickle”
ValueError:不安全的字符串pickle
我在这里做错了什么?
答案 0 :(得分:4)
Pickle是二进制格式,CSV不是二进制安全的。你需要对你的pickle进行编码 - 例如,使用base64.b64encode - 如果你想以文本格式传输它。
答案 1 :(得分:2)
Pickle可以是二进制格式,但默认情况下它完全是ASCII安全的(协议0)。阅读pickle文档了解具体信息:pickle.dump。
它通常会有换行符,因此在使用基于行的格式(如CSV)时必须考虑到这一点。
如果您正在阅读其他人的泡菜,他们可能已经使用了二进制协议,但您粘贴的输出看起来像正常的酸洗。