2014-11-23 69 views
0

我試圖從csv文件導入數據到本地gae數據存儲中。基本上它工作正常,但由於某種原因,我最終與datetimeProperty而不是隻有一個datePoperty。 導入後,所有日期值都包含時間信息(例如2014-11-21 00:00:00)。在csv導入期間DateProperty變成datetimeProperty

有誰知道爲什麼?

型號:

class DaxValue(db.Model): 
    date = db.DateProperty(required=True) 
    close = db.FloatProperty() 
    prev_close = db.FloatProperty() 
    high = db.FloatProperty() 
    low = db.FloatProperty() 
    opn = db.FloatProperty() 
    isTradingDay = db.BooleanProperty() 
    popDate = db.DateTimeProperty() 

代碼導入CSV:

def pop_db(): 

    with open('table.csv', 'rb') as csvfile: 
     reader = csv.reader(csvfile, delimiter=',') 
     next(reader) 

     for row in reader: 

      date = datetime.fromtimestamp(mktime(time.strptime(row[0], "%Y-%m-%d"))).date() 
      open1 = float(row[1]) 
      high = float(row[2]) 
      low = float(row[3]) 
      close = float(row[4]) 
      adj_close = float(row[6]) 

      query = "SELECT * FROM DaxValue WHERE date = DATE('%s')" % str(date) 
      q = db.GqlQuery(query) 
      dax_value = q.get() 

      if not dax_value: 
       dax_value = DaxValue(date=date, open=open1, close=close, high=high, low=low, isTradingDay=True) 

      else: 
       dax_value.close = close 
       dax_value.opn = open1 
       dax_value.high = high 
       dax_value.low = low 
       dax_value.popDate = datetime.now() 
       dax_value.isTradingDay = True 
       dax_value.prev_close = adj_close 

      dax_value.put() 

我該查詢返回無,即使沒有存儲當天的條目掙扎......

yesterday = (datetime.datetime.now() - timedelta(days=1)) 
query = "SELECT * FROM DaxValue WHERE date = DATE('%s')" % str(yesterday.date()) 

回答

1

Google將所有日期屬性和時間屬性內部存儲爲日期時間。下面是this page摘錄:

類DateProperty(verbose_name =無,auto_now =假 auto_now_add =假,...)沒有一天的時間日期;有關更多信息,請參閱 DateTimeProperty。

值類型:datetime.date;內部轉換爲datetime.datetime

我同時使用date和datetime屬性,並且這對我沒有造成問題,即使將它們全部存儲爲日期時間似乎很奇怪。

+0

好吧!感謝這些信息。我以前見過它,但並沒有真正意識到它的意義。除此之外,我嘗試查詢特定日期時遇到問題。我在原始問題的底部添加了我的示例。 – nouseforaname 2014-11-23 18:01:57

+0

請爲新問題提出一個新問題,並避免在現有問題中增加新問題。 – Nick 2014-12-20 00:05:39