执行代码时出错。我有一个数据存储区实体,它具有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())
答案 0 :(得分:2)
您似乎使用的是通用google-cloud-datastore
客户端库,而不是NDB Client Library。
对于google-cloud-datastore
,所有日期和/或时间属性都具有相同的格式。来自Date and time:
- JSON
- 字段名称:
timestampValue
- type:string(RFC 3339格式化,带有毫秒,例如
2013-05-14T00:01:00.234Z
)- 协议缓冲区
- 字段名称:
timestamp_value
- 输入:
Timestamp
- 排序顺序:按时间顺序
- 注意:存储在Cloud Datastore中时,精确到微秒;向下舍入任何额外的精度。
因此,在设置/比较这些属性时,尝试使用格式化为指定的字符串(或protobuf Timestamp的整数?),而不是datetime
模块(与NDB库一起使用)的直接对象。对于查询,同样的可能也是如此。
注意:这仅基于文档,我自己没有使用通用库。