zoukankan      html  css  js  c++  java
  • protobuf python api

    摘要:

    python中一切都可以看作类。那么如何查看每个类的API。使用ipython

    python  protobuf 的函数在message中定义

    此处所有的api说明:https://developers.google.com/protocol-buffers/docs/reference/python/google.protobuf.message.Message-class


    编译

    protoc -I=./ --python_out=./ people.proto



    1  GidChannelInfo.proto


    package bfd.gidchannelinfo;
    //定义 gid的来源,是dsp还是电商或者媒体等
    message Channel
    {
    required string name = 1; //来源,例如dsp_Cbehe
    required int64 timestamp = 2; //时间戳
    }


    //key为 G:Channel:gid
    message GidChannelInfo
    {
    required Channel init_channel = 1; //gid初次产生的channel来源
    repeated Channel channel = 2; //包含的所有channel渠道
    }


    2  例子



    gidchannelinfo_tmp = GidChannelInfo_pb2.GidChannelInfo()
    channel_tmp = GidChannelInfo_pb2.Channel()


    DB_SERVER = 'app-2'
    db = "DMP_GDMP_Cbehe"
    conn = mdb.Connect(DB_SERVER,'bfdroot','qianfendian',db)
    cur = conn.cursor()
    #cur.execute("select gid,update_time from Mapping_gid where id >0 and id<20000000")
    cur.execute("select gid,update_time from Mapping_gid limit 1")
    results = cur.fetchall()
    for result in results:
        print "result :",str(result)
        gid = result[0]

    date_tmp = result[1]
        key = "G:GidChannelInfo:"+gid
        #d = datetime.datetime.strptime(date_tmp,"%Y-%m-%d %H:%M:%S")
        timestamp_tmp = int(time.mktime(date_tmp.timetuple()))
        channel_tmp.name = "dsp_baifendian"
        channel_tmp.timestamp = timestamp_tmp
        print "timestamp_tmp :",timestamp_tmp
        gidchannelinfo_tmp.init_channel.CopyFrom(channel_tmp)
        channel_tmp = gidchannelinfo_tmp.channel.add()
        channel_tmp.name = "dsp_baifendian"
        channel_tmp.timestamp = timestamp_tmp
        channel_tmp = gidchannelinfo_tmp.channel.add()
        channel_tmp.name = "dsp_behe"
        channel_tmp.timestamp = timestamp_tmp
        print "gidchannelinfo_tmp: ",gidchannelinfo_tmp
        mystr = gidchannelinfo_tmp.SerializeToString()


    3 注意 :

    对于 Singular fields  可以使用 gci.init_channel.MergeFrom赋值

    或者对于每个属性赋值。gci.init_channel.name=name



    对于repeated fileds可以使用

    CopyFrom    MergeFrom



    4 api 说明


    MergeFrom(selfother_msg)

    source code 

    Merges the contents of the specified message into current message.
    
    This method merges the contents of the specified message into the current
    message. Singular fields that are set in the specified message overwrite
    the corresponding fields in the current message. Repeated fields are
    appended. Singular sub-messages and groups are recursively merged.
    
    Args:
      other_msg: Message to merge into the current message.


    CopyFrom(selfother_msg)

    source code 
    Copies the content of the specified message into the current message.
    
    The method clears the current message and then merges the specified
    message using MergeFrom.
    
    Args:
      other_msg: Message to copy into the current one.


    此处所有的api说明:https://developers.google.com/protocol-buffers/docs/reference/python/google.protobuf.message.Message-class

     

  • 相关阅读:
    算数表达式二叉树
    Java汉诺塔算法
    Struts2中的设计模式ThreadLocal模式续
    Java基础知识总结(五)
    Java数组扩容算法及Java对它的应用
    Java Arrays.sort源代码解析
    Java字符串排列算法
    Java基础知识总结(三)
    SSIS OLE DB Source中执行带参数的存储过程
    Sql server中Collation conflict问题
  • 原文地址:https://www.cnblogs.com/catkins/p/5270510.html
Copyright © 2011-2022 走看看