Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 迁移到高复制数据存储后,实体密钥不同_Python_Google App Engine_Google Cloud Datastore - Fatal编程技术网

Python 迁移到高复制数据存储后,实体密钥不同

Python 迁移到高复制数据存储后,实体密钥不同,python,google-app-engine,google-cloud-datastore,Python,Google App Engine,Google Cloud Datastore,我向hrd的迁移在appspot.com上不起作用。应用程序数据存储在原始主/从(MS)和高复制数据存储(hrd)中都有3种“类型”的数据:组、Pin和日志。每个组实体都有与之关联的Pin实体和/或日志实体,但这些关联在hrd中不再有效(这是迁移后的全部),因此我的应用程序不再有效,我正在寻求帮助以恢复它 下面我报告数据存储中前两个Pin实体的实体键。我在每对钥匙的较短钥匙中插入了一些空格,以便于排列钥匙,查看它们的相似之处。请注意,所有键的开始和结束方式都类似,但MS和hrd不同 Decode

我向hrd的迁移在appspot.com上不起作用。应用程序数据存储在原始主/从(MS)和高复制数据存储(hrd)中都有3种“类型”的数据:
组、Pin和日志。每个
实体都有与之关联的Pin实体和/或日志实体,但这些关联在hrd中不再有效(这是迁移后的全部),因此我的应用程序不再有效,我正在寻求帮助以恢复它

下面我报告数据存储中前两个
Pin
实体的实体键。我在每对钥匙的较短钥匙中插入了一些空格,以便于排列钥匙,查看它们的相似之处。请注意,所有键的开始和结束方式都类似,但MS和hrd不同

Decoded entity key: Group: name=250cc > Pin: id=1
Entity #1 MS  key: ah        NzaW1wbGlmeWNvbm5lY3Rpb25zchkLEgVHcm91cCIFMjUwY2MMCxIDUGluGAEM
Entity #1 hrd key: ahlzfnNpbXBsaWZ5Y29ubmVjdGlvbnMtaHJkchkLEgVHcm91cCIFMjUwY2MMCxIDUGluGAEM


Decoded entity key: Group: name=250cc > Pin: id=5001
Entity #2 MS   key: ah        NzaW1wbGlmeWNvbm5lY3Rpb25zchoLEgVHcm91cCIFMjUwY2MMCxIDUGluGIknDA
Entity #2 hrd  key: ahlzfnNpbXBsaWZ5Y29ubmVjdGlvbnMtaHJkchoLEgVHcm91cCIFMjUwY2MMCxIDUGluGIknDA
使用此链接。您将看到名为“游乐场”的
,并查看它在URL中的调用方式。但是,出现的唯一标记(贴图接点)是自迁移到hrd后添加的标记

编辑#0

下面是我的Python代码,用于在父级为
组的情况下添加保存
Pin

elif action == "add":
            pin = Pin(parent=place)
            pin.name = self.request.get('details')
            pin.lat = float(self.request.get('lat'))
            pin.lng = float(self.request.get('lng'))
            pin.category = int(self.request.get('category'))
            pin.label = self.request.get('label')
            new_id = pin.put()
            self.response.out.write(new_id)
下面是
Pin
的类定义

class Pin(db.Model):
    date = db.DateTimeProperty(auto_now_add=True)
    lat = db.FloatProperty()
    lng = db.FloatProperty()
    name = db.StringProperty()
    cornerColor  = db.StringProperty(default='ffffff')
    height = db.IntegerProperty(default=32)
    label = db.StringProperty(default='')
    labelColor = db.StringProperty(default='000000')
    labelSize = db.IntegerProperty(default=2)
    primaryColor = db.StringProperty(default='ff0000')
    shadowColor = db.StringProperty(default='000000')
    shape = db.StringProperty(default='circle')
    strokeColor = db.StringProperty(default='000000')
    width = db.IntegerProperty(default=32)
    category = db.IntegerProperty(default=0)
    scategory = db.StringProperty()
    logindex = db.IntegerProperty(default=0)
    imageindex = db.IntegerProperty(default=0)
    deleteRequested = db.BooleanProperty(default=False)
编辑#0

编辑#1

毕竟,我的应用程序的问题不在于实体键。相反,问题在于我试图处理另一个不推荐的Google(Maps)特性的方式,该特性涉及javascript/html中的样式化标记

对不起,这里太吵了。这个问题是由于我尝试在javascript/html模板中使用try..catch模式作为解决方法时的无能/无能造成的


编辑#1

编码的密钥字符串预计会更改。编码版本包含应用程序的Id。在迁移过程中,使用新的应用程序Id重新写入密钥。对密钥的引用也同样更新

如果将密钥存储为db.ReferenceProperty,则在迁移过程中会自动为您更新该密钥

但是,如果存储字符串,如

AHNZAW1WBGLMEWNWVBM5LY3RPB25ZCHKLEGVHCM91CCIFMJUWY2MMCXIDUGLGAEM

在db.StringProperty()中(或其他类似方式,例如URL的一部分),它们将不会被更新,您需要将自己更新为


您为Pin引用的模型似乎没有链接到其他实体,因此不会出现任何问题。

这可能更适合应用程序引擎生产票据,以便有人可以深入挖掘数据。我建议在这里输入一个bug:它不是bug。在迁移指南中有很好的记录,手动保存的ID不会迁移,因为所有ID都会在hdr中更改。我使用的过程中“手动保存”了什么?我使用了appengine自动化流程(正如我们在SO中讨论的)[。这可能取决于您在不同实体中存储引用的方式。自动迁移工具应处理存储为数据存储密钥的任何属性。但是,如果您仅存储id或序列化密钥,则必须手动迁移它们:。请查看我添加的代码的编辑问题。是否存在问题?这对主从来说很管用。