2013-04-08 3 views
0

15 분 간격으로 웹 사이트를 구문 분석하는 GAE (Google 앱 엔진) 앱이 있습니다. 매 15 분마다 cron은 가장 오래된 데이터 (이 경우 BitData())의 타임 스탬프를 검사하고 utc.now()까지 해당 지점의 데이터를 구문 분석합니다. Unfortionetly 최신 BitData() 개체에 대한 NDB 데이터베이스 쿼리의 첫 번째 부분을 지나갈 수 없습니다.cronjob에서 NDB 쿼리 수행

코드 예제 : 제공

TypeError: order() expects a Property or query Order; received <class 'google.appengine.ext.ndb.model.DateTimeProperty'> 

대신 순서에게 응답을 반대로 q = q.order(-BitData.tsamp)를 사용 : 나는했습니다

TypeError: bad operand type for unary -: 'type' 

def bitcoincharts_last(): 
    q = BitData.query() 
    q = q.order(BitData.tstamp) 
    if q == None: 
     return '0' 
    else: 
     return q[0] 

이 로그에 오류를 끈다 내 코드를 예제와 비교하여 확인했습니다. here, here, d NDB Google 문서 도구를 사용하지만 쿼리가 실행되지 않는 이유를 찾을 수 있습니다.

BitData :

class BitData(ndb.Model): 
    key = ndb.KeyProperty 
    tstamp = ndb.DateTimeProperty 
    price = ndb.IntegerProperty 
    amount = ndb.IntegerProperty 
+1

BitData 모델의 정의는 무엇입니까? –

+0

이 질문을 업데이트했습니다. – Davidrd91

답변

3

모델 정의해야한다 : 당신은 단지 NDB 속성 클래스를 향해 가리 키도록 클래스 필드를 정의하는

class BitData(ndb.Model): 
    key = ndb.KeyProperty() 
    tstamp = ndb.DateTimeProperty() 
    price = ndb.IntegerProperty() 
    amount = ndb.IntegerProperty() 

, 실제로 그 중 하나를 인스턴스화되지 않습니다.

+0

고마워요. 일반 DB 모델에서 전환했을 때 나는 그것을 놓쳐 버렸을 것입니다. 또한 주문 전에 마이너스 기호를 사용하면 :'q = q.order (-BitData.tsamp)'는 여전히 같은 오류를냅니다. – Davidrd91

+0

정말요? 내가 제공 한 새로운 모델 정의를 사용하면 잘 작동합니다. – someone1

+0

실제로 귀하의 권리. 내가 이클립스에 저장하지 않고 새로 고침 한 다음 다시 변경했다. 고마워요! – Davidrd91