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的对象,然后逆序列化,就得到了我们需要的信息,简单吧(/ □ \)。

后面需要的数据,就用父名.子名访问即可。