2017-08-17 37 views
0

獲取執行代碼時的錯誤。我有一個具有Date類型屬性的數據存儲實體。存儲在用於特定行的實體的示例日期屬性值是2016年1月3日(19:00:00.000)EDTValueError:Unknown protobuf attr type <type'datetime.date'>

我正在執行基於日期過濾實體值的代碼大於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

模型定義在哪裏? – marcadian

回答

1

你似乎使用通用google-cloud-datastore客戶端庫,而不是NDB Client Library

對於google-cloud-datastore所有日期和/或時間屬性具有相同的格式。從Date and time

  • JSON
    • field name: timestampValue
    • type: string (RFC 3339 formatted, with milliseconds, for instance 2013-05-14T00:01:00.234Z)
  • Protocol buffer
    • field name: timestamp_value
    • type: Timestamp
  • Sort order: Chronological
  • Notes: When stored in Cloud Datastore, precise only to microseconds; any additional precision is rounded down.

所以當設置/比較這種特性儘量使用符合規定格式的字符串,而不是直接從datetime模塊(與NDB庫工作)的對象(或整數爲protobuf的Timestamp?)。同樣的可能也適用於查詢。

注意:這僅基於文檔,我自己並沒有使用通用庫。

+0

如何在Python中爲與其他時間戳值比較構建RFC 3339格式的時間戳(2016-01-03(19:00:00.000)EDT)值? – user845405

+0

https://stackoverflow.com/questions/8556398/generate-rfc-3339-timestamp-in-python –

+0

獲取錯誤文件「/Users/Ram/fintech-api/flex/internal/cron/stock_data_transformation.py」,第3行,在 from datetime import tzinfo,timedelta,datetime,timezone ImportError:無法導入名稱時區 – user845405

相關問題