首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >App Engine数据存储中的空列表: Java与Python

App Engine数据存储中的空列表: Java与Python
EN

Stack Overflow用户
提问于 2010-02-22 22:40:16
回答 4查看 1.8K关注 0票数 11

我在App Engine中有以下java模型类:

代码语言:javascript
复制
public class Xyz ... {
    @Persistent
    private Set<Long> uvw;
}

在Java语言中使用空的 set uvw保存对象Xyz时,我得到一个"null“字段(如appengine数据存储查看器中所列)。当我尝试在Python中加载相同的对象时(通过remote_api),正如下面的python模型类所定义的:

代码语言:javascript
复制
class Xyz(db.Model):
    uvw = db.ListProperty(int)

我得到一个"BadValueError: Property uvw is required“。

在Python语言中使用空的uvw列表保存同一类的另一个对象时,数据存储区查看器会打印一个"missing“字段。

显然,空列表存储处理在Java和Python之间是不同的,并导致“不兼容”的对象。

因此我的问题是:有没有办法:

  • 强制Java将空列表存储为“缺失”字段,
  • 强制Python在加载对象时优雅地接受"null“列表作为空列表-

或者关于如何在两种语言中处理空列表域的任何其他建议。

感谢您的回答!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-06-20 21:36:55

如果您为您的Python属性分配一个默认值,它应该可以工作:

代码语言:javascript
复制
uvw = db.ListProperty(int, default=[])
票数 2
EN

Stack Overflow用户

发布于 2010-06-17 03:23:15

我使用的是低级java api,所以我所做的可能会有所不同。但在将集合类型的数据结构保存到数据存储之前,我会将其转换为数据存储自然处理的数据结构。这主要包括字符串和ByteArrays。

听起来像是java应用程序引擎将空集解释为null值。python没有正确读取这个空值。您可以尝试将空集保存为字符串值"empty set“。然后让python检查数据存储是否包含该字符串值。如果它这样做了,它可以分配一个新的空集,如果不是,它可以将属性作为一个集读取。

票数 1
EN

Stack Overflow用户

发布于 2010-02-22 22:55:08

Java Set行为是因为Java的集合是引用类型,缺省情况下为null。

要实际创建一个空集,请像这样声明它:

代码语言:javascript
复制
@Persistent
private Set<Long> uvw = new HashSet<Long>();

或者在右侧使用Set的其他实现。不过,HashSet是最常用的集合类型。其他有趣的集合类型是两个线程安全的集合CopyOnWriteArraySetConcurrentSkipListSet;还有有序集合类型LinkedHashSet和排序集合类型TreeSet

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2311533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档