ProtocolBuffers的基础说明和使用(二)
2015-02-03 10:03:23
·
作者:
·
浏览: 41
to_proto(self, rank):
rank.userID = self.userID
rank.contestID = self.contestID
rank.ac = self.ac
rank.penalty = self.penalty
rank.total = self.total
for problemID in self.problem_list:
problem = self.problem_list[problemID]
p = rank.problem.add()
p.problemID = problem.problemID
p.acindex = problem.acindex
p.totalindex = problem.totalindex
p.time = problem.time
p.FB = problem.FB
for submit in problem.submit_list:
s = p.submit.add()
s.status = submit.status
s.date_time = submit.date_time
s.runID = submit.runID
return rank
这样我们就把数据存入了我们声明的protobuf里面了,然后就是存储的时候序列化,比如我们存储到SSDB里面即:
ssdb_api.SetContestRankListProto(contestID, contest_rank_list.SerializeToString())
至此,信息已经存入数据库,那么接下来就是如何读出了:
对于得到我们存储的rank信息来说,即:
contest_rank_list = ssdb_api.GetContestRankListProto(contest_id)
rank_list = rank_pb2.ContestRankList()
rank_list.ParseFromString(contest_rank_list)
即,再次声明一个protobuf的对象,然后逆序列化,就得到了我们需要的信息,简单吧(/ □ \)。
后面需要的数据,就用父名.子名访问即可。