7

最初に ndb.Model を作成し、フィールドの ndb プロパティ タイプを変更したい (たとえば、IntegerProperty を StringProperty に変更したい) としますが、そのデータを失わないように、そのフィールドに格納されている現在のデータをキャストしたいとします。1 つの方法は、単純に新しいフィールド名を作成し、スクリプトを使用してデータを移行することですが、これを実現するためのより便利な方法が他にあるでしょうか?

たとえば、次のモデルがあるとします。

class Car(ndb.Model):
    name = ndb.StringProperty()
    production_year = ndb.IntegerProperty()

そして、エンティティのインスタンスを保存しました:

c = new Car()
c.name = "Porsche"
c.production_year = 2013 

そして、設定した値を「失う」ことなく、 production_year を ndb.StringProperty() に変更したいと考えていました (値はまだ存在しますが、取得することはできません)。production_year を ndb.StringProperty() のインスタンスに変更しただけでは、型が一致しないため、フィールド値は意味のある値を報告しません。

したがって、モデルを次のように変更した場合:

class Car(ndb.Model):
    name = ndb.StringProperty()
    production_year = ndb.StringProperty()

ドット表記でフィールドを取得しようとすると、値が None になります。誰かがこの状況に遭遇した場合、それを解決するために何をしたか説明してもらえますか? ありがとう。

4

2 に答える 2

2

プロパティをテキストに変更したい場合は、ティムの答えに追加するだけで、次のことができます。

from google.appengine.api import datastore_types

(...)

for i in results:
    i['production_year'] = datastore_types.Text(i['production_year'])
于 2015-01-13T11:20:07.430 に答える