1

私はデータを収集しましたが、特にクリーンなデータではありません。これはデータストアに一括アップロードされています。ただし、すべてのレコードを単純にループしようとすると、次の問題が発生します。一括操作を実行するだけなので、この時点では検証についてはあまり気にしませんが、GAEではデータレコードをループすることすらできないようです。私はこれの底に行きたいです。私の知る限り、すべてのレコードにはその国のフィールドのデータがあり、検証を切り替えることができますが、なぜこれが発生し、GAEが機密であるのかを誰かが説明できます。ありがとう

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
4

1 に答える 1

1

独自のスクリプトで実行するバルクプロセスがある場合は、Company検証なしでクラスの変更バージョンを作成できます。db.Modelクラスはクラスの名前に基づくデータストアの単なるラッパーであるため、コードのさまざまな部分にさまざまな動作のさまざまなクラスを含めることができます。

したがって、次のようなmodel.pyファイルがある可能性があります。

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

# Normal operations go here

そして、次のような別のbulk_process.pyファイル:

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")

この2番目のモデルクラスには検証がないため、正常に実行されるはずです。また、コードは論理的に分離されているため、コードの残りの部分で検証を削除することによる意図しない副作用について心配する必要はありません。バルクプロセスが検証なしで誤ってデータを書き戻さないように注意してください(これで問題がない場合を除く)。

于 2012-05-04T20:47:28.733 に答える