使用PHP-GDS库,当密钥的格式为"__xyz__"时,我在尝试"upstart"实体时收到异常。
有没有办法解决这个问题,因为密钥是一个我可能无法控制的用户名,而__xyz__是一个完全有效的用户名。这是代码和异常消息:
$username = "__xyz__";
$obj_user = new Entity();
$obj_user->setKeyName($username);
try {
$result = $obj_user_store->upsert($obj_user);
}catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "'n";
return false;
}
例外:
Caught exception: The key path element name "__xyz__" is reserved.
不幸的是,没有,您必须以某种方式对用户名进行编码。或者,我建议使用自动生成的密钥,并将用户提供的数据存储在值中,而不是密钥中。
对于这种情况,文档非常糟糕,在被取代的Python API数据存储的文档中只提到了一点:https://cloud.google.com/appengine/docs/python/datastore/entities:"密钥名称不能以两个下划线__*__
开头和结尾"。Java文档对此只字不提。也不是现代Python API。而且我找不到任何用于数据存储的PHP文档。
但所有API都是一样的,因为异常发生在数据库端,所以使用哪种语言并不重要(下面都是protobuf)。
我只知道双下划线的一个用法:当你构建一个查询,并希望按键升序/降序排序时。您可以通过按名为__key__
的不存在的保留密钥进行排序来完成此操作。