1

看起來db.Key和ndb.Key實例是不一樣的。將db.Key轉換爲ndb.Key - AppEngine上的Python

我有一個db.Key實例。我如何將其轉換爲ndb.Key?

這就是我想要做的事:

NDBEntity(ndb.Model): 
    some_property = ndb.StringProperty() 

DBEntity(db.Model): 
    some_property = ndb.StringProperty() 

# I have an instance of a DBEntity already saved in the datastore 
db_entity_instance = DBEntity.all().get() 

ndb_entity_instance = NDBEntity(id="some_id", parent=db_entity_instance.key(), some_property="foo").put() 
# The above line doesn't work because it expects a Key Instance for the parent, and it doesn't seem to recognize a db.Key instance. 

任何想法?

+1

在同一個應用程序中使用這兩個可能是一個糟糕的主意 - 您應該一次性移植所有代碼。 –

+0

我同意尼克的觀點,但有些情況下,將舊款式轉換爲新款的價格過高。在這種情況下,可能需要暫時在舊密鑰和新密鑰之間工作,或者在新的ndb模型上爲舊的db.py模型創建屬性引用。 –

回答

2

您需要將「舊」db.Key轉換爲新的ndb.Key。看看NDB Key Class瞭解更多信息。

+1

我使用了「from_old_key(k):從傳入的」舊「數據存儲區API(db)密鑰中返回一個NDB密鑰。」謝謝! – Albert

+0

艾伯特說什麼。使用from_old_key。 –

3

要轉換DB關鍵NBD鍵,你將不得不:

ndb.Key.from_old_key(your_old_DB_key) 

看看NDB Cheet Sheet爲您進一步的轉換。

+1

但是關於如何將生產數據存儲中的舊密鑰更改爲新密鑰的任何想法? – user1769203