python - GAE 数据存储在 python api 中预先加载

标签 python google-app-engine google-cloud-datastore eager-loading pyamf

我有两个一对多关系的模型:

class Question(db.Model):

questionText = db.StringProperty(multiline=False)

类答案(db.Model):

answerText = db.StringProperty(multiline=False)

question = db.ReferenceProperty(Question, collection_name='answers')

我在 Flex 中实现了前端并使用 pyamf 加载数据。

当我尝试加载所有包含相关问题的答案时,所有答案都按预期工作,我可以访问 字段

answer.question

但是,在加载问题的情况下(例如通过 Questions.all() ),“question.answers”保持为空/null

(尽管在服务器/python端我可以毫无问题地修改question.answers - 可能是在延迟加载之后)。

那么是否可以加载所有问题和答案?

(我知道这在 JPA Java api 中是可能的,但是 python 呢?)

我应该使用额外的设置、GQL 查询还是 django 框架来使其工作吗?

最佳答案

默认情况下,PyAMF 不会对 ReferenceProperty 字段进行编码,除非它们已由服务方法专门加载。这是有意为之,这样您最终就不会进行不必要的编码。

PyAMF 查找特殊的类属性 __amf__,它用于自定义该类型实例的编码和解码过程。更多信息可参见docs .

因此,要强制对所有问题的所有答案进行编码,您应该能够执行以下操作:

class Question(db.Model):
    class __amf__:
        static = ('answers',)

    questionText = db.StringProperty(multiline=False)

class Answer(db.Model):
    answertText = db.StringProperty(multiline=False)
    question = db.ReferenceProperty(Question, collection_name='answers')

设置静态属性将确保每个 Question 实例都设置了 answers 属性(通过 getattr),该属性将依次发送到数据存储区查找您需要的。

重要的是,此设置不适用于应用程序范围,因此任何问题都将具有出现在实例上的答案属性。

关于python - GAE 数据存储在 python api 中预先加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2098417/

相关文章:

python - python中函数参数列表中的*代表什么?

python - python中的Imageio : compressing gif

java - App Engine - 打开的实例太多

python - 使用 Pandas 忽略 .diff() 中的 NaN

除了字符串和整数之外的Python字典键?

java - 如何在 Google App Engine 中处理 Blob,而不是 Cloud Storage 和 BlobStore API

google-app-engine - Go http包如何发送204 No Content?

python - 使用 Python 对 JSON 进行 Google App Engine 数据存储查询

windows - gcloud beta emulators datastore 在谷歌云SDK安装中启动错误

python - 如何使用数据存储模拟器检查正在运行的 dev_appserver.py