【问题标题】:How to set a protobuf Timestamp field in python?如何在 python 中设置 protobuf Timestamp 字段?
【发布时间】:2020-12-03 22:33:58
【问题描述】:

我正在探索协议缓冲区的使用,并希望使用 protobuf3 中的新 Timestamp 数据类型。这是我的 .proto 文件:

syntax = "proto3";

package shoppingbasket;

import "google/protobuf/timestamp.proto";

message TransactionItem {
  optional string product = 1;
  optional int32 quantity = 2;
  optional double price = 3;
  optional double discount = 4;
}

message Basket {
  optional string basket = 1;
  optional google.protobuf.Timestamp tstamp = 2;
  optional string customer = 3;
  optional string store = 4;
  optional string channel = 5;
  repeated TransactionItem transactionItems = 6;
}

message Baskets {
  repeated Basket baskets = 1;
}

从这个 .proto 文件生成 python 类后,我尝试使用生成的类创建一些对象。代码如下:

import shoppingbasket_pb2
from google.protobuf.timestamp_pb2 import Timestamp

baskets = shoppingbasket_pb2.Baskets()
basket1 = baskets.baskets.add()
basket1.basket = "001"
basket1.tstamp = Timestamp().GetCurrentTime()

失败并出现错误:

AttributeError: 不允许对协议消息对象中的复合字段“tstamp”进行赋值。

谁能向我解释为什么这不起作用,因为我很困惑。

【问题讨论】:

    标签: python protocol-buffers


    【解决方案1】:

    Timestamp

    我想你想要:

    basket1.tstamp.GetCurrentTime()
    

    【讨论】:

    • 这个API是个灾难,.GetCurrentTime()设置了一个值?什么?!
    【解决方案2】:

    你也可以解析它:

    Timestamp().FromJsonString("2022-03-26T22:23:34Z")
    

    【讨论】:

      猜你喜欢
      • 2022-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-23
      • 2022-12-10
      相关资源
      最近更新 更多