2012-05-04 14 views
1

私はデータを収集しました。特にデータはクリーンではありません。これはデータストアに一括アップロードされています。しかし、単純にすべてのレコードをループするときは、次の問題が発生します。私は大量の操作を実行するだけですが、GAEはデータレコードをループさせないように見えるので、この時点では検証についてはあまり気にしません。私はこれの底に乗りたい。私の知る限りでは、すべての記録は国のためのフィールドにデータを持っており、私は検証を切り替えることができますが、なぜこれが起こっているのか、GAEが敏感である理由を説明することができます。おかげGoogle App Engineからレコードを返すことができません

result = Company.all() 
     my_count = result.count() 
     if result: 
      for r in result: 
       self.response.out.write("hello") 

データモデルは、これらのプロパティがあります:あなたは、独自のスクリプトで実行したいバルクプロセスを持っている場合は

class Company(db.Model): 
    companyurl = db.LinkProperty(required=True) 
    companyname = db.StringProperty(required=True) 
    companydesc = db.TextProperty(required=True) 
    companyaddress = db.PostalAddressProperty(required=False) 
    companypostcode = db.StringProperty(required=False) 
    companyemail = db.EmailProperty(required=True) 
    companycountry = db.StringProperty(required=True) 

エラーメッセージは、

Traceback (most recent call last): 
    File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/webapp/_webapp25.py", line 701, in __call__ 
    handler.get(*groups) 
    File "/base/data/home/apps/XXX/1.358667163009710608/showcompanies.py", line 99, in get 
    for r in result: 
    File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/db/__init__.py", line 2312, in next 
    return self.__model_class.from_entity(self.__iterator.next()) 
    File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/db/__init__.py", line 1441, in from_entity 
    return cls(None, _from_entity=entity, **entity_values) 
    File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/db/__init__.py", line 973, in __init__ 
    prop.__set__(self, value) 
    File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/db/__init__.py", line 613, in __set__ 
    value = self.validate(value) 
    File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/db/__init__.py", line 2815, in validate 
    value = super(StringProperty, self).validate(value) 
    File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/db/__init__.py", line 640, in validate 
    raise BadValueError('Property %s is required' % self.name) 
BadValueError: Property companycountry is required 
+0

このエラーはいつ発生しますか?あなたがエンティティの上をループし、出てこんにちは...これはあなたがエンティティを保存/入れようとしているように見え、あなたは会社の国の値を見逃しているように見えます。 – aschmid00

+0

上記のコードはスケルトンコードです。私はいくつかの値を編集していましたが、レコードをループするだけで同じ問題が発生しました...なぜ私の驚きです。その部分にはputを実行する場所はありません。 – Androidian

+0

そのエラーを引き起こす正確なコードは何ですか?明らかにその特定の財産なしで構成されているエンティティが存在します。最後の3行だけでなく、全体のトレースバックを投稿してください... – aschmid00

答えて

1

を下回っているとします検証なしでCompanyクラスの修正版を作成できます。 db.Modelクラスはクラスの名前に基づいてデータストアへのラッパーに過ぎないため、コードのさまざまな部分で異なる動作を使用して異なるクラスを持つことができます。

ですから、とmodel.pyファイル可能性があります:この第2のモデルクラスが検証を欠いているので、それが実行する必要があります

class Company(db.Model): 
    companyurl = db.LinkProperty() 
    # ... 
    companycountry = db.StringProperty() 

result = Company.all() 
my_count = result.count() 
if result: 
    for r in result: 
    self.response.out.write("hello") 

:と

class Company(db.Model): 
    companyurl = db.LinkProperty(required=True) 
    # ... 
    companycountry = db.StringProperty(required=True) 

# Normal operations go here 

そして、別のbulk_process.pyファイルをちょうど良い。また、コードが論理的に分離されているため、残りのコードで検証を削除することによる意図しない副作用を心配する必要はありません。あなたが大丈夫な場合を除き、大量のプロセスが妥当性検査なしで誤ってデータを書き戻さないようにしてください。

関連する問題