2017-08-17 20 views
0

コードの実行中にエラーが発生しました。 Date型のプロパティを持つデータストアエンティティがあります。特定の行のエンティティに格納されている日付プロパティ値の例は、2016-01-03(19:00:00.000)です。EDTValueError:不明なprotobuf attrタイプ<タイプ '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

と間違っているものをすべてのアイデアは、あなたはNDB Client Library、ジェネリックgoogle-cloud-datastoreクライアントライブラリを使用していないように見えます。

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.

ので、このような特性を比較する/設定するときは、指定されたフォーマットされた文字列を使用しようとすると、直接(NDBライブラリで動作)datetimeモジュールからのオブジェクトではない(いるProtobuf Timestampまたは整数を?)。同じの場合はとなります。

注:これはドキュメントのみに基づいており、私は汎用ライブラリを自分で使用しませんでした。

+0

どのように私は別のタイムスタンプ値にcomparsionのための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インポートtzinfo、timedelta、datetime、timezone ImportError:名前のタイムゾーンをインポートできません – user845405

関連する問題