【发布时间】:2014-10-29 10:43:45
【问题描述】:
我有一个包含一些嵌套类的 Java 类,如下所示:
public class OuterClass{
@PrimaryKey
private String id;
@Persistent
private String name;
// --- blah blah
static class MyNestedClass{
//--- properties declaration
}
}
这个类工作正常,基本上只有一个结构(OuterClass)我可以存储 n 个嵌套结构,每个结构都用作数据存储表。
使用 datastore viewer 检查我的 ds 我发现我现在有一个名为 OuterClass$MyNestedClass 的表,我可以像这样在此表上成功运行 GQL 查询:
//--- note the wrapping quotation marks on the table name
SELECT * FROM "OuterClass$MyNestedClass" where something = '100'
到目前为止一切正常。现在我需要创建一个 google app engine python 方法来清空该嵌套类表。我已经对其他表/类进行了此操作,但从未使用嵌套类。
这是我的python代码:
import cgi
import datetime
import urllib
import webapp2
from google.appengine.ext import db
class OuterClass$MyNestedClass(db.Model):
name = db.StringProperty()
surname= db.StringProperty()
age = db.StringProperty()
class emptyMyNestedClassHandler(webapp2.RequestHandler):
def get(self):
nestedclass= db.GqlQuery("SELECT __key__ FROM \"OuterClass$MyNestedClass\"")
count = 0
for p in nestedclass:
count += 1
db.delete(nestedclass)
self.response.out.write("Deleted SMyNestedClass Entities: " + str(count))
app = webapp2.WSGIApplication([
('/emptyMyNestedClass', emptyMyNestedClassHandler)
], debug=True)
这是我遇到的错误
class OuterClass$MyNestedClass(db.Model):
^
SyntaxError: invalid syntax
我尝试将类名从 OuterClass$MyNestedClass 更改为 MyNestedClass,但出现此错误:
KindError: No implementation for kind 'OuterClass$MyNestedClass'
我必须为我的 python 类指定哪个名称才能使其工作?我该如何处理 $ 问题?
希望我已经足够清楚了,谢谢
解决方案
在Matt's suggestion 之后,我的 JAVA 类现在看起来像这样:
public class OuterClass{
@PrimaryKey
private String id;
@Persistent
private String name;
// --- blah blah
@PersistenceCapable( table="NestedClass")
@Embedded
static class NestedClass{
//--- properties declaration
}
}
这是 Python 代码:
import cgi
import datetime
import urllib
import webapp2
from google.appengine.ext import db
class NestedClass(db.Model):
name = db.StringProperty()
surname = db.StringProperty()
age = db.StringProperty()
class emptyNestedClassHandler(webapp2.RequestHandler):
def get(self):
nestedclass= db.GqlQuery("SELECT __key__ FROM NestedClass")
count = 0
for p in nestedclass:
count += 1
db.delete(nestedclass)
self.response.out.write("Deleted NestedClassEntities: " + str(count))
app = webapp2.WSGIApplication([
('/emptyNestedClass', emptyNestedClassHandler)
], debug=True)
请注意,我必须声明类 NestedClass。
谢谢!
【问题讨论】:
-
注意术语“子类”和“超类”,因为在这种特殊情况下,您分别显示“静态嵌套类”和“外部类”。除此之外,您是否尝试过使用 @Persistent( name="SomethingWithoutADollarSign") 注释嵌套类?
-
@Matt 你是对的,谢谢,问题已更新!不,我还没有尝试过,我会尽快尝试。谢谢!
标签: java python google-app-engine google-cloud-datastore