使用來自ProtoRPC的Message類向其他數據存儲實體發送引用時,應該使用str(key)
還是key.id()
。第一個是字符串,第二個是長字符串。在ProtoRPC.Message中使用數據存儲實體的ID或密鑰
它到底有什麼不同嗎?有任何限制嗎?
看來,過濾查詢時,會出現相同的結果。
感謝
使用來自ProtoRPC的Message類向其他數據存儲實體發送引用時,應該使用str(key)
還是key.id()
。第一個是字符串,第二個是長字符串。在ProtoRPC.Message中使用數據存儲實體的ID或密鑰
它到底有什麼不同嗎?有任何限制嗎?
看來,過濾查詢時,會出現相同的結果。
感謝
這取決於你的目標是和你是否正在使用db
或nbd
。
如果您使用str(key)
,您將得到一個實體密鑰,並需要構造一個新密鑰(取決於該值在服務器上)。使用ndb
,我會建議使用key.urlsafe()
以明確,然後ndb.Key(urlsafe=value)
來創建新密鑰。不幸的是,你可以用db
做的最好的是str(key)
和db.Key(string_value)
。使用key.id()
也取決於ndb
或db
。如果您使用的是db
,那麼您知道該值將是一個整數(並且key.name()
將是一個字符串),但如果您使用的是ndb
,它可能是整數或字符串。在這種情況下,您應該使用key.integer_id()
或key.string_id()
。無論哪種情況,如果將整數轉換爲字符串,則需要在檢索實體或設置鍵之前手動將其轉換爲整數;例如MyModel.get_by_id(int(value))
如果我做一個推薦,我勸你要明確你的ID,注意它們的分配方式,並給這些不透明值到API中的用戶。如果您想讓App Engine爲您分配ID,請使用protorpc.messages.IntegerField
來表示這些ID,而不是轉換爲字符串。
此外,從db
請開關ndb
,如果你還沒有。
我目前使用db。既然只是爲了一個學校項目,我可能會堅持這一點,但我會爲我的下一個項目保持思想。現在ID自動分配,我得到的字符串或整數。當我從數據存儲中檢索實體時,我只是過濾了__key__字段......這是錯誤的嗎? – 2013-05-09 09:20:11