<p><code>ndb.JsonProperty</code>遵循<a href="https://developers.google.com/appengine/docs/python/datastore/propertyclass#Property_make_value_from_datastore" rel="nofollow">the docs</a>并以与定义自定义属性相同的方式执行操作:它定义<code>make_value_from_datastore</code>和{<cd3>}方法。在</p>
<p>文档不会告诉您何时调用这些方法,因为何时调用这些方法取决于appengine中的db实现。在</p>
<p>然而,当模型需要访问数据库时,它们很可能会被调用。例如,在<code>get_value_for_datastore</code>的文档中:</p>
<blockquote>
<p>A property class can override this to use a different data type for the datastore than for the model instance, or to perform other data conversion just prior to storing the model instance.</p>
</blockquote>
<p>如果您真的需要验证发生了什么,可以提供您自己的JsonProperty子类,如下所示:</p>
<pre><code>class LoggingJsonProperty(ndb.JsonProperty):
def make_value_from_datastore(self, value):
with open('~/test.log', 'a') as logfile:
logfile.write('make_value_from_datastore called\n')
return super(LoggingJson, self).make_value_from_datastore(value)
</code></pre>
<p>如果需要,可以记录JSON字符串、回溯等。显然,您可以使用一个标准的日志记录功能,而不是把东西放在单独的日志中。但这足以让我们看到发生了什么。在</p>
<p>当然,另一个选择是阅读代码,我相信它在<code>appengine/ext/db/__init__.py</code>中。在</p>
<p>由于它没有文档记录,因此每个版本的详细信息可能会发生变化,因此每次升级时都必须重新运行测试或重新读取代码(如果需要100%确定的话)。在</p>