ValueError:未知的protobuf attr类型<type'datetime.date'=“”>

时间:2017-08-17 19:03:22

标签: google-app-engine google-cloud-datastore

执行代码时出错。我有一个数据存储区实体,它具有Date类型的属性。存储在特定行的实体中的示例日期属性值为 2016-01-03(19:00:00.000)EDT

我正在执行的代码是根据大于2016-01-01的日期过滤实体值。不知道代码有什么问题

错误

ValueError: Unknown protobuf attr type <type 'datetime.date'>

代码

import pandas as pd
import numpy as np
from datetime import datetime

from google.cloud import datastore
from flask import Flask,Blueprint
app = Flask(__name__)

computation_cron= Blueprint('cron.stock_data_transformation', __name__)
@computation_cron.route('/cron/stock_data_transformation')
def cron():
ds = datastore.Client(project="earningspredictor-173913")
query = ds.query(kind='StockPrice')
query.add_filter('date', '>', datetime.strptime("2016-01-01", '%Y-%m-%d').date())

dataframe_data = []
temp_dict = {}
for q in query.fetch():
    temp_dict["stock_code"] = q["stock_code"]
    temp_dict["date"] = q["date"]
    temp_dict["ex_dividend"] = q["ex_dividend"]
    temp_dict["split_ratio"] = q["split_ratio"]
    temp_dict["adj_open"] = q["adj_open"]
    temp_dict["adj_high"] = q["adj_high"]
    temp_dict["adj_low"] = q["adj_low"]
    temp_dict["adj_close"] = q["adj_close"]
    temp_dict["adj_volume"] = q["adj_volume"]
    dataframe_data.append(temp_dict)
sph = pd.DataFrame(data=dataframe_data,columns=temp_dict.keys())
# print sph.to_string()
query = ds.query(kind='EarningsSurprise')
query.add_filter('act_rpt_date', '>', datetime.strptime("2016-01-01", '%Y-%m-%d').date())

dataframe_data = []
temp_dict = {}
for q in query.fetch():
    temp_dict["stock_code"] = q["stock_code"]
    temp_dict["eps_amount_diff"] = q["eps_amount_diff"]
    temp_dict["eps_actual"] = q["eps_actual"]
    temp_dict["act_rpt_date"] = q["act_rpt_date"]
    temp_dict["act_rpt_code"] = q["act_rpt_code"]
    temp_dict["eps_percent_diff"] = q["eps_percent_diff"]
    dataframe_data.append(temp_dict)
es = pd.DataFrame(data=dataframe_data,columns=temp_dict.keys())

1 个答案:

答案 0 :(得分:2)

您似乎使用的是通用google-cloud-datastore客户端库,而不是NDB Client Library

对于google-cloud-datastore,所有日期和/或时间属性都具有相同的格式。来自Date and time

  
      
  • JS​​ON      
        
    • 字段名称:timestampValue
    •   
    • type:string(RFC 3339格式化,带有毫秒,例如2013-05-14T00:01:00.234Z
    •   
  •   
  • 协议缓冲区      
        
    • 字段名称:timestamp_value
    •   
    • 输入:Timestamp
    •   
  •   
  • 排序顺序:按时间顺序
  •   
  • 注意:存储在Cloud Datastore中时,精确到微秒;向下舍入任何额外的精度。
  •   

因此,在设置/比较这些属性时,尝试使用格式化为指定的字符串(或protobuf Timestamp的整数?),而不是datetime模块(与NDB库一起使用)的直接对象。对于查询,同样的可能也是如此。

注意:这仅基于文档,我自己没有使用通用库。