3

私はこのようなモデルを持っています:

class Users(db.Model):
   email = db.EmailProperty(required=True, indexed=True)
   user_name = db.StringProperty(required=True, indexed=True)
   api_key = db.StringProperty(required=False, indexed=False)
   active = db.BooleanProperty(required=True, indexed=False)
   real_name = db.StringProperty(required=False, indexed=False)
   ...etc

次のようなクエリを作成しようとしたとき:

user = db.GqlQuery("SELECT email, api_key, active FROM Users WHERE user_name = :1", username).get()

None を返していますが、このクエリを使用すると:

user = db.GqlQuery("SELECT * FROM Users WHERE user_name = :1", username).get()

大丈夫、全部返します。しかし、最初のクエリを使用できないのはなぜですか?

4

1 に答える 1

7

インデックスのないプロパティを射影することはできません。ドキュメントに記載されているように

射影できるプロパティにはいくつかの制限があります。射影できるのは、インデックス付きのプロパティのみです。これは、Text、Blob、またはインデックスなしとして明示的にマークされたその他のプロパティの射影がサポートされていないことを意味します。

Admin Console の Datastore Viewer でクエリを実行すると、必要なインデックスを確認できます。

于 2012-06-15T23:29:44.850 に答える