質問

イムは、特定のタイプの日付範囲内のいくつかの値を検索しようとしているが、データベースに存在する日付のコンテンツは、クエリによって返されていません。

ここでPythonコードの抽出物である:

deltaDays = timedelta(days= 20)
endDate = datetime.date.today()
startDate = endDate - deltaDays

result = db.GqlQuery(
   "SELECT * FROM myData WHERE mytype = :1 AND pubdate >= :2 and pubdate <= :3", type, startDate, endDate
  )

class myData(db.Model):
   mytype = db.StringProperty(required=True)
   value =  db.FloatProperty(required=True)
   pubdate = db.DateTimeProperty(required=True)

GQLはデータを返しますが、私は期待していいくつかの行が欠落しています:

 2009-03-18 00:00:00
(missing date in results: 2009-03-20 data exists in database)
 2009-03-23 00:00:00
 2009-03-24 00:00:00
 2009-03-25 00:00:00
 2009-03-26 00:00:00
(missing date in results: 2009-03-27 data exists in database)
 2009-03-30 00:00:00
(missing date in results: 2009-03-31. data exists in database)
 2009-04-01 00:00:00
 2009-04-02 00:00:00
 2009-04-03 00:00:00
 2009-04-06 00:00:00

私はデバルクロードスクリプトを介してデータをアップロードしました。私はちょうど破壊される索引または類似した何かを考えることができます。この同じクエリは、私が持っていた別のテーブルのために働くために使用されます。しかし、私は別のソースから新しいコンテンツと交換しなければならなかった、この新しいコンテンツは、同じ方法でクエリに応答していません。それはどんな違いがあれば、テーブルの周り700.000行を持っています。

私はそれがAppEngineのデータストアでのバグと思われるより多くの研究アリを行っています。 バグの詳細については、このリンクをチェックしてください。 http://code.google.com/p/googleappengine/issues/詳細?ID = 901

私は、インデックスをdropingと運でそれを再現しようとしています。

感謝

役に立ちましたか?

解決

は何も私には間違って見えません。あなたは欠落している日付はまたMYTYPEを持っていることを確信している==タイプ?

私は過去にインデックスを持ついくつかの面白い行動を観察しています。私はあなたのすべてのレコードを反復処理し、戻ったばかりのデータベース内)(それらを置くためのハンドラを書いてお勧めします。多分バルクアップローダーで何かが正常に動作していない。

ここで私はモデルクラス内のすべてのエンティティを反復処理するために使用するハンドラのタイプです

 class PPIterator(BaseRequestHandler):
  def get(self):
    query = Model.gql('ORDER BY __key__')
    last_key_str = self.request.get('last')
    if last_key_str:
      last_key = db.Key(last_key_str)
      query = Model.gql('WHERE __key__ > :1 ORDER BY __key__', last_key)
    entities = query.fetch(11)
    new_last_key_str = None
    if len(entities) == 11:
      new_last_key_str = str(entities[9].key())
    for e in entities:
      e.put()
    if new_last_key_str:
      self.response.out.write(json.write(new_last_key_str))
    else:
      self.response.out.write(json.write('done'))

あなたは、エンティティを反復処理したいものは何でも使用することができます。私は、ブラウザのウィンドウにJavascriptを使用するために使用されるが、リクエストの数十万人を作るときには、豚がわかりました。これらの日私はこの1つのようなRubyスクリプトを使用することがより便利に見つけます:

require 'net/http'
require 'json'
last=nil
while last != 'done'
  url = 'your_url'
  path = '/your_path'
  path += "?/last=#{last}" if last
  last = Net::HTTP.get(url,path)
  puts last
end

ベン

UPDATE:今リモートAPIが動作し、信頼性の高いされていることを、私はめったにもうハンドラのこのタイプを書きません。同じアイデアを使用すると、リモートAPIコンソール内のエンティティを反復処理するためにそこに使用したいコードに適用されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top