使用Google Cloud Functions时如何为Google Cloud Datastore实体设置日期属性?

时间:2019-02-18 12:26:42

标签: python date google-cloud-datastore google-cloud-functions

在使用Cloud Functions在Cloud Datastore中创建实体时,找不到为属性设置“日期时间”的有效方法

我正在使用Python 3.7 Cloud Function,它将JSON文件作为输入。 JSON具有一系列对象,将它们逐个读取以创建数据存储区实体对象,然后将其写入数据存储区。 在数据存储区中,所有属性都存储为“字符串”。我希望将日期字段存储为Cloud Datastore实体的“日期时间”属性。

dsclient = datastore.Client(os.environ.get('project_id')) 
client = storage.Client()
bucket = client.get_bucket(event['bucket'])
blob = bucket.blob(event['name'])
input_bytes = blob.download_as_string()
input_string = input_bytes.decode("utf-8")
obj = json.loads(input_string)
length = len(obj[kind])     

for i in range(0, length):
    key = obj[kind][i]['Key']
    score = create_score(obj[kind][i], key, ns)
    dsclient.put(score)

def create_score(score, key, ns): 
    """creates the score datastore entity"""
    pkey = dsclient.key(kind, key, namespace='test')
    score_entity = datastore.Entity(
        key=pkey,        
        exclude_from_indexes=exclude_index_list
    )
    score_entity.update(score)

    return score_entity

语句score_entity.update(score)将所有属性创建为字符串。有没有一种方法可以在创建时指定每个属性的数据类型? 我已经看到使用App Engine上的Python nbd模型可以实现这一点。但是我没有使用App Engine创建实体,它是一个Cloud Function。

1 个答案:

答案 0 :(得分:0)

您需要确保该属性是datetime.datetime,而不是datetime.date或其他类型的对象(包括字符串)。

您应该可以执行以下操作:

score_entity = datastore.Entity(
    key=pkey,        
    exclude_from_indexes=exclude_index_list
)
score_entity["your_datetime"] = datetime.datetime.now()

...

client.put(score_entity)