gae模型get_by_id()vs get_by_key_name()

2024-10-01 07:20:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道如何使用Model.get_by_key_名称()与Model.get_按_id()

例如,假设我返回一些JSON,它将用于显示一个记录表,对于每个记录,都有一个删除该记录的按钮。假设我有模型'Foo'和模型实例'Foo'。在

我相信我可以使用以下任一方法将每个按钮与相应的记录关联起来:

str(foo.key())  #suppose it eval's to "axhYm92ZZXJvY2tyDgsSCENhnb3J5GBQM"

或者

^{pr2}$

这些值中的一个将进入HTML表单,用户可以单击按钮,请求删除具有此key/id的记录

请求将导致:

Foo.get_by_key_name("axhYm92ZZXJvY2tyDgsSCENhnb3J5GBQM").delete()

或者

Foo.get_by_id(57).delete()

现在,作为一个犹豫不决的多动症程序员,我需要知道。。。哪条是“正确”的道路?它们似乎都能起作用,但有没有什么情况能使其中一种优于另一种呢?使用“键”方式与“id”方式相比有什么优势吗?在


Tags: key模型名称idjsongetbymodel
2条回答

你得到的是一个密钥字符串,而不是一个密钥名称。如果你想从一个对象的键串中得到一个对象。然后使用Model.get(keystring)。Key_name是您分配给一个应该是唯一的对象的名称。如果你认为你可以使用任何唯一的属性,你可以把它作为一个键名,或者使用默认的生成的id。使用一个键名的唯一方法是get_or_insert(),如果有一个实体存在,它会返回一个实体,否则会创建一个实体并返回它。在

您将密钥名称与stringized密钥混淆。他们是不同的。键的名称是在构造时通过reserved key_name属性给实体的名称。如果没有,系统将生成一个id。一个实体键可以有一个名称或一个id,但不能两者都有。在

如果您有意将一个键串接起来,您可以通过将它传回键构造器来重新构造它。在

stringifiedKey = str(key)
reconstitutedKey = db.Key(stringifiedKey)

假设你真正的意思是姓名和身份证,这是一个更方便的问题。任何性能差异都将是微小的。在

相关问题 更多 >