gae Model get_by_id()vs get_by_key_name()

the*_*des 8 python google-app-engine

我想知道使用Model.get_by_key_name()vs Model.get_by_id()获取记录

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

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

str(foo.key())  #suppose it eval's to "axhYm92ZZXJvY2tyDgsSCENhnb3J5GBQM"
Run Code Online (Sandbox Code Playgroud)

要么

foo.key().id()  #suppose it eval's to "57"
Run Code Online (Sandbox Code Playgroud)

其中一个值将进入HTML表单,用户可以单击按钮,该请求将使用此键/ id删除记录.

然后该请求将导致:

Foo.get_by_key_name("axhYm92ZZXJvY2tyDgsSCENhnb3J5GBQM").delete()
Run Code Online (Sandbox Code Playgroud)

要么

Foo.get_by_id(57).delete()
Run Code Online (Sandbox Code Playgroud)

现在,作为犹豫不决的ADHD程序员,我需要知道......这是"正确的"方式吗?他们似乎都工作,但是有哪些情况使一个人比另一个更好?使用'key'方式与'id'方式有什么好处?

Dav*_*ith 11

您将Key name与字符串化Key混淆.他们是不同的.密钥的名称是您在构造时通过保留的key_name属性为实体提供的名称.如果不这样做,系统将生成一个id.实体密钥可以具有名称或ID,但不能同时具有两者.

如果您有意将字符串化,则可以通过将其传递回Key构造函数来重新构建它.

stringifiedKey = str(key)
reconstitutedKey = db.Key(stringifiedKey)
Run Code Online (Sandbox Code Playgroud)

假设你真的意味着名字与身份,这是一个更方便的问题.任何性能差异都将是微观的.