Python .put()之前referenceproperty的GAE数据存储密钥用法

Python .put()之前referenceproperty的GAE数据存储密钥用法,python,google-app-engine,google-cloud-datastore,Python,Google App Engine,Google Cloud Datastore,这似乎是一个简单的问题,但我希望比我目前所做的更清楚: 给出如下表格(仅示例): 有一种方法可以使用对其他两个表的查询来填写“Person”和“Animal”,例如(仅示例): 你也可以抓取钥匙,但我的问题就在这里: 基于上面这样的查询,您能否只需拔出键并稍后使用?当然可以,但最好的方法是什么 让我们想想这个例子: for person in query: key_for_later_use = person.key() 现在我们可以使用: Person = key_for_later

这似乎是一个简单的问题,但我希望比我目前所做的更清楚:

给出如下表格(仅示例):

有一种方法可以使用对其他两个表的查询来填写“Person”和“Animal”,例如(仅示例):

你也可以抓取钥匙,但我的问题就在这里:

基于上面这样的查询,您能否只需拔出键并稍后使用?当然可以,但最好的方法是什么

让我们想想这个例子:

for person in query:
    key_for_later_use = person.key()
现在我们可以使用:

Person = key_for_later_use
人们会认为这是正确的吗?除了这个person.key()对象似乎不起作用,所以我进一步研究了它:

str(person.key())
这提供了一个键,该键与您在查看“Datastore Viewer”时在GAE SDK控制台中看到的键类似,因此可能很有用,但也不太幸运

在通过for循环进行迭代时,从查询中获取密钥的最佳方法是什么

我一直在尝试通过创建一个列表来卸载数据存储查询,我会检查现有的内容,然后从另一个列表中抓取密钥:

people_list = [] # Assume populated with 'FirstName'
people_list_keys = [] # Assume populated with person.key()
if 'Patrick' in people_list:
    patrick_key = people_list_keys[people.index('Patrick')]
然而person.key()实际上不起作用,str()看起来不错,但不起作用。。我的意思是将其用作插入的SpiritAnimal.Person作为引用属性

想法


哦,我真的不是在做一个SpiritAnimal应用程序,这些都只是示例;)

其他地方可能存在断开连接,我运行了以下代码:

    People(FirstName="Patrick", LastName="Doe").put()

    animal = Animals(AnimalName="Tiger").put()
    people_list = [] 
    people_list_keys = []

    query = People.all()
    query.filter('FirstName', 'Patrick')
    query.get()

    for person in query:
        people_list.append(person.FirstName)
        people_list_keys.append(person.key())

    patrick_key = people_list_keys[people_list.index('Patrick')]

    newSpiritAnimal = SpiritAnimal(
    Person     = patrick_key,
    Animal     = animal
    )
    newSpiritAnimal.put()

灵兽被“放”了,没问题。我不太明白你想做什么。也许再多解释一点,我能帮上一点忙。

读了所有这些之后,我很沮丧地发现你实际上并没有制作一个精灵动物应用程序。太酷了。你能发布错误消息吗?我不知道你什么意思,它不起作用。
people_list = [] # Assume populated with 'FirstName'
people_list_keys = [] # Assume populated with person.key()
if 'Patrick' in people_list:
    patrick_key = people_list_keys[people.index('Patrick')]
    People(FirstName="Patrick", LastName="Doe").put()

    animal = Animals(AnimalName="Tiger").put()
    people_list = [] 
    people_list_keys = []

    query = People.all()
    query.filter('FirstName', 'Patrick')
    query.get()

    for person in query:
        people_list.append(person.FirstName)
        people_list_keys.append(person.key())

    patrick_key = people_list_keys[people_list.index('Patrick')]

    newSpiritAnimal = SpiritAnimal(
    Person     = patrick_key,
    Animal     = animal
    )
    newSpiritAnimal.put()