9

私がこれを理解するのを手伝ってください:

v1.6.6では、次の2744行目にありgoogle/appengine/ext/db/__init__.pyます。

class UnindexedProperty(Property):
  """A property that isn't indexed by either built-in or composite indices.

  TextProperty and BlobProperty derive from this class.
  """
  def __init__(self, *args, **kwds):
    """Construct property. See the Property class for details.

    Raises:
      ConfigurationError if indexed=True.
    """
    self._require_parameter(kwds, 'indexed', False)



    kwds['indexed'] = True
    super(UnindexedProperty, self).__init__(*args, **kwds)
 .
 .
 .

インデックス付きパラメーターをFalseに制約した後、Trueに設定しました。

4

1 に答える 1

4

1.2.2 より前は、Text や Blob など、あらゆるプロパティ タイプに対してフィルター クエリを実行できました。彼らは空のリストしか返しませんでしたが、うまくいきました。バージョン 1.2.2 では、indexed選択したプロパティのインデックス作成を無効にできるプロパティの属性が導入されました[1]。それ以降、クエリを実行するプロパティにインデックスを付ける必要があります。そうしないと、例外がスローされます。

Text プロパティと Blob プロパティにはインデックスを作成できないことがわかっています。他に何も変更しないと、これらのプロパティに対するクエリは、1.2.2 以降 (以前は発生していませんでした) 例外を発生させます。回帰を導入して既存のアプリを壊さないようにするために、この行がクラスkwds['indexed'] = Trueに追加されました。UnindexedProperty

依存するすべてのコードを制御できる場合は、例外の発生を開始する方がクリーンなソリューションでした。しかし、既存のアプリに影響を与えないという観点から、パッチを当てることにしました。

このスニペットに変更kwds['indexed'] = Trueして実行することで、自分で試すことができます。kwds['indexed'] = False

from google.appengine.ext import db

class TestModel(db.Model):
  text = db.TextProperty()

TestModel(text='foo').put()
print TestModel.all().filter('text =', 'foo').fetch(10)

[1] http://code.google.com/p/googleappengine/source/browse/trunk/python/RELEASE_NOTES#1165

于 2012-07-03T16:46:31.870 に答える