1

私はやろうとしています:

MyModel({'text': db.Text('text longer than 500 byets')})

しかし、得る:

BadValueError: Indexed value fb_education must be at most 500 bytes

これは、古い db api のこの問題からの持ち越しに過ぎないと考えています。

https://groups.google.com/forum/?fromgroups#!topic/google-appengine/wLAwrjtsuks

4

5 に答える 5

5

最初にエンティティを動的に作成します:

 kindOfEntity = "MyTable"
class DynamicEntity(ndb.Expando):
     @classmethod
     def _get_kind(cls):
        return kindOfEntity

次に、以下に示すように、ランタイム/動的にテキスト プロパティを割り当てます。

dbObject = DynamicEntity()
key = "studentName"
value = "Vijay Kumbhani"
textProperties = ndb.TextProperty(key)
dbObject._properties[key] = {}
dbObject._values[key] = {}
dbObject._properties[key] = textProperties 
dbObject._values[key] = value
dbObject.put()

次に、キー プロパティが Text プロパティで割り当てられた後

于 2013-11-27T04:34:04.063 に答える
1

古いAPIの一部であるをNDBで使用しようとしていますがdb.Text、これは機能しません。

私の知る限り、Expando現在、NDBでインデックス付けされていないプロパティを設定する良い方法はありません。ここ_default_indexed = Falseで(簡単に)説明されているように、expandoサブクラスに設定できますが、これにより、すべてのexpandoプロパティのデフォルトがインデックスに登録されなくなります。

より良い解決策は、一緒に使用することを避けることExpandoです。モデルを定義する(またはモデルを動的に定義する)ことでより良いサービスが提供されないような、説得力のある使用法は比較的少ないです。

于 2012-05-23T01:38:18.423 に答える
1

ええ、私は質問が古いことを知っています。しかし、私も同じ解決策を探しましたが、結果は見つかりませんでした。だからここで私のために働くレシート(私は User() を "permissions" プロパティで展開します):

prop = ndb.GenericProperty("permissions", indexed=False)
prop._code_name = "permissions"
user._properties["permissions"] = prop
prop._set_value(user, permissions)
于 2013-04-20T20:51:39.753 に答える
1

エンティティの 1 つのプロパティを Text に変更しようとしていました。ただし、プロパティを明示的にマップしないと、Expando/Model はエンティティのすべてのプロパティを GenericProperty に変更するように見えます (取得後)。

これらのエンティティを再度配置すると (目的のプロパティを変更するために)、他の既存の TextProperties に影響し、通常の文字列に変更されます。

低レベルのデータストア API のみが機能しているようです。

https://gist.github.com/feroult/75b9ab32b463fe7f9e8a

これは、remote_api_shell.py から呼び出すことができます。

from yawp import *
yawp(kind).migrate(20, 'change_property_to_text', 'property_name')
于 2015-01-13T11:16:32.707 に答える